@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.
Files changed (2) hide show
  1. package/dist/index.js +67 -76
  2. 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
- sourceType: 'script',
6
- range: [0, 0],
6
+ comments: [],
7
7
  loc: {
8
- start: {
9
- line: 1,
10
- column: 0
11
- },
12
8
  end: {
13
- line: 1,
14
- column: 0
9
+ column: 0,
10
+ line: 1
11
+ },
12
+ start: {
13
+ column: 0,
14
+ line: 1
15
15
  }
16
16
  },
17
- comments: [],
18
- tokens: []
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 match = versionRegex.exec(value.trim());
51
- if (!match) {
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
- if (a.major !== b.major) {
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
- minimumVersion: options.minimumVersion ?? defaultMinimumVersion,
63
+ badVersions: options.badVersions ?? defaultBadVersions,
74
64
  maximumVersion: options.maximumVersion ?? defaultMaximumVersion,
75
- badVersions: options.badVersions ?? defaultBadVersions
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
- type: 'string',
99
- pattern: versionPattern
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
- messages: {
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 parserServices = context.sourceCode.parserServices;
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)?.text ?? badVersion));
135
- if (badVersions.has(version.text)) {
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.text
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
- value: version.text,
151
- minimumVersion: minimumVersion.text
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
- value: version.text,
162
- maximumVersion: maximumVersion.text
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": "11.2.0",
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
  }