@lvce-editor/eslint-plugin-nvmrc 11.2.0 → 12.1.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/dist/index.js +67 -76
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -1,30 +1,32 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
|
|
1
3
|
const createProgram = () => {
|
|
2
4
|
return {
|
|
3
|
-
type: 'Program',
|
|
4
5
|
body: [],
|
|
5
|
-
|
|
6
|
-
range: [0, 0],
|
|
6
|
+
comments: [],
|
|
7
7
|
loc: {
|
|
8
|
-
start: {
|
|
9
|
-
line: 1,
|
|
10
|
-
column: 0
|
|
11
|
-
},
|
|
12
8
|
end: {
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
column: 0,
|
|
10
|
+
line: 1
|
|
11
|
+
},
|
|
12
|
+
start: {
|
|
13
|
+
column: 0,
|
|
14
|
+
line: 1
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
range: [0, 0],
|
|
18
|
+
sourceType: 'script',
|
|
19
|
+
tokens: [],
|
|
20
|
+
type: 'Program'
|
|
19
21
|
};
|
|
20
22
|
};
|
|
21
23
|
const parseForESLint = () => {
|
|
22
24
|
return {
|
|
23
25
|
ast: createProgram(),
|
|
26
|
+
scopeManager: null,
|
|
24
27
|
services: {
|
|
25
28
|
isNvmrc: true
|
|
26
29
|
},
|
|
27
|
-
scopeManager: null,
|
|
28
30
|
visitorKeys: {
|
|
29
31
|
Program: ['body']
|
|
30
32
|
}
|
|
@@ -45,72 +47,62 @@ const defaultMinimumVersion = '20.0.0';
|
|
|
45
47
|
const defaultMaximumVersion = '24.15.0';
|
|
46
48
|
const defaultBadVersions = ['24.16.0'];
|
|
47
49
|
const versionPattern = String.raw`^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$`;
|
|
48
|
-
const versionRegex = new RegExp(versionPattern);
|
|
49
50
|
const parseVersion = value => {
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
51
|
+
const version = semver.parse(value.trim());
|
|
52
|
+
if (!version || version.prerelease.length > 0 || version.build.length > 0) {
|
|
52
53
|
return undefined;
|
|
53
54
|
}
|
|
54
|
-
return
|
|
55
|
-
major: Number(match[1]),
|
|
56
|
-
minor: Number(match[2]),
|
|
57
|
-
patch: Number(match[3]),
|
|
58
|
-
text: `${Number(match[1])}.${Number(match[2])}.${Number(match[3])}`
|
|
59
|
-
};
|
|
55
|
+
return version;
|
|
60
56
|
};
|
|
61
57
|
const compareVersion = (a, b) => {
|
|
62
|
-
|
|
63
|
-
return a.major - b.major;
|
|
64
|
-
}
|
|
65
|
-
if (a.minor !== b.minor) {
|
|
66
|
-
return a.minor - b.minor;
|
|
67
|
-
}
|
|
68
|
-
return a.patch - b.patch;
|
|
58
|
+
return semver.compare(a, b);
|
|
69
59
|
};
|
|
70
60
|
const getRuleOptions = context => {
|
|
71
61
|
const [options = {}] = context.options;
|
|
72
62
|
return {
|
|
73
|
-
|
|
63
|
+
badVersions: options.badVersions ?? defaultBadVersions,
|
|
74
64
|
maximumVersion: options.maximumVersion ?? defaultMaximumVersion,
|
|
75
|
-
|
|
65
|
+
minimumVersion: options.minimumVersion ?? defaultMinimumVersion
|
|
76
66
|
};
|
|
77
67
|
};
|
|
78
68
|
const meta = {
|
|
79
|
-
type: 'problem',
|
|
80
69
|
docs: {
|
|
81
70
|
description: 'Disallow invalid or unsupported .nvmrc versions'
|
|
82
71
|
},
|
|
72
|
+
messages: {
|
|
73
|
+
badVersion: '.nvmrc version {{value}} is not allowed',
|
|
74
|
+
invalidVersion: 'Invalid .nvmrc version: {{value}}',
|
|
75
|
+
versionTooNew: '.nvmrc version {{value}} is newer than {{maximumVersion}}',
|
|
76
|
+
versionTooOld: '.nvmrc version {{value}} is older than {{minimumVersion}}'
|
|
77
|
+
},
|
|
83
78
|
schema: [{
|
|
84
|
-
type: 'object',
|
|
85
79
|
additionalProperties: false,
|
|
86
80
|
properties: {
|
|
87
|
-
minimumVersion: {
|
|
88
|
-
type: 'string',
|
|
89
|
-
pattern: versionPattern
|
|
90
|
-
},
|
|
91
|
-
maximumVersion: {
|
|
92
|
-
type: 'string',
|
|
93
|
-
pattern: versionPattern
|
|
94
|
-
},
|
|
95
81
|
badVersions: {
|
|
96
|
-
type: 'array',
|
|
97
82
|
items: {
|
|
98
|
-
|
|
99
|
-
|
|
83
|
+
pattern: versionPattern,
|
|
84
|
+
type: 'string'
|
|
100
85
|
},
|
|
86
|
+
type: 'array',
|
|
101
87
|
uniqueItems: true
|
|
88
|
+
},
|
|
89
|
+
maximumVersion: {
|
|
90
|
+
pattern: versionPattern,
|
|
91
|
+
type: 'string'
|
|
92
|
+
},
|
|
93
|
+
minimumVersion: {
|
|
94
|
+
pattern: versionPattern,
|
|
95
|
+
type: 'string'
|
|
102
96
|
}
|
|
103
|
-
}
|
|
97
|
+
},
|
|
98
|
+
type: 'object'
|
|
104
99
|
}],
|
|
105
|
-
|
|
106
|
-
invalidVersion: 'Invalid .nvmrc version: {{value}}',
|
|
107
|
-
versionTooOld: '.nvmrc version {{value}} is older than {{minimumVersion}}',
|
|
108
|
-
versionTooNew: '.nvmrc version {{value}} is newer than {{maximumVersion}}',
|
|
109
|
-
badVersion: '.nvmrc version {{value}} is not allowed'
|
|
110
|
-
}
|
|
100
|
+
type: 'problem'
|
|
111
101
|
};
|
|
112
102
|
const create = context => {
|
|
113
|
-
const
|
|
103
|
+
const {
|
|
104
|
+
parserServices
|
|
105
|
+
} = context.sourceCode;
|
|
114
106
|
if (!parserServices?.isNvmrc) {
|
|
115
107
|
return {};
|
|
116
108
|
}
|
|
@@ -120,49 +112,48 @@ const create = context => {
|
|
|
120
112
|
const version = parseVersion(value);
|
|
121
113
|
if (!version) {
|
|
122
114
|
context.report({
|
|
123
|
-
node,
|
|
124
|
-
messageId: 'invalidVersion',
|
|
125
115
|
data: {
|
|
126
116
|
value
|
|
127
|
-
}
|
|
117
|
+
},
|
|
118
|
+
messageId: 'invalidVersion',
|
|
119
|
+
node
|
|
128
120
|
});
|
|
129
121
|
return;
|
|
130
122
|
}
|
|
131
123
|
const options = getRuleOptions(context);
|
|
132
124
|
const minimumVersion = parseVersion(options.minimumVersion) ?? parseVersion(defaultMinimumVersion);
|
|
133
125
|
const maximumVersion = parseVersion(options.maximumVersion) ?? parseVersion(defaultMaximumVersion);
|
|
134
|
-
const badVersions = new Set(options.badVersions.map(badVersion => parseVersion(badVersion)?.
|
|
135
|
-
if (badVersions.has(version.
|
|
126
|
+
const badVersions = new Set(options.badVersions.map(badVersion => parseVersion(badVersion)?.version ?? badVersion));
|
|
127
|
+
if (badVersions.has(version.version)) {
|
|
136
128
|
context.report({
|
|
137
|
-
node,
|
|
138
|
-
messageId: 'badVersion',
|
|
139
129
|
data: {
|
|
140
|
-
value: version.
|
|
141
|
-
}
|
|
130
|
+
value: version.version
|
|
131
|
+
},
|
|
132
|
+
messageId: 'badVersion',
|
|
133
|
+
node
|
|
142
134
|
});
|
|
143
135
|
return;
|
|
144
136
|
}
|
|
145
137
|
if (compareVersion(version, minimumVersion) < 0) {
|
|
146
138
|
context.report({
|
|
147
|
-
node,
|
|
148
|
-
messageId: 'versionTooOld',
|
|
149
139
|
data: {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
140
|
+
minimumVersion: minimumVersion.version,
|
|
141
|
+
value: version.version
|
|
142
|
+
},
|
|
143
|
+
messageId: 'versionTooOld',
|
|
144
|
+
node
|
|
153
145
|
});
|
|
154
146
|
return;
|
|
155
147
|
}
|
|
156
148
|
if (compareVersion(version, maximumVersion) > 0) {
|
|
157
149
|
context.report({
|
|
158
|
-
node,
|
|
159
|
-
messageId: 'versionTooNew',
|
|
160
150
|
data: {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
151
|
+
maximumVersion: maximumVersion.version,
|
|
152
|
+
value: version.version
|
|
153
|
+
},
|
|
154
|
+
messageId: 'versionTooNew',
|
|
155
|
+
node
|
|
164
156
|
});
|
|
165
|
-
return;
|
|
166
157
|
}
|
|
167
158
|
}
|
|
168
159
|
};
|
|
@@ -175,23 +166,23 @@ const validVersion = {
|
|
|
175
166
|
};
|
|
176
167
|
|
|
177
168
|
const plugin = {
|
|
169
|
+
configs: {},
|
|
178
170
|
meta: {
|
|
179
171
|
name: 'nvmrc',
|
|
180
172
|
version: '0.0.1'
|
|
181
173
|
},
|
|
182
174
|
rules: {
|
|
183
175
|
'valid-version': validVersion
|
|
184
|
-
}
|
|
185
|
-
configs: {}
|
|
176
|
+
}
|
|
186
177
|
};
|
|
187
178
|
const recommended = [{
|
|
188
179
|
files: ['**/.nvmrc'],
|
|
189
|
-
plugins: {
|
|
190
|
-
nvmrc: plugin
|
|
191
|
-
},
|
|
192
180
|
languageOptions: {
|
|
193
181
|
parser
|
|
194
182
|
},
|
|
183
|
+
plugins: {
|
|
184
|
+
nvmrc: plugin
|
|
185
|
+
},
|
|
195
186
|
rules: {
|
|
196
187
|
'nvmrc/valid-version': 'error'
|
|
197
188
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/eslint-plugin-nvmrc",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.1.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/lvce-editor/eslint-config.git"
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
10
|
-
"keywords": [],
|
|
11
10
|
"license": "MIT",
|
|
12
|
-
"description": "Lint .nvmrc files."
|
|
11
|
+
"description": "Lint .nvmrc files.",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"semver": "^7.8.4"
|
|
14
|
+
}
|
|
13
15
|
}
|