Skip to content

Commit 7cd2839

Browse files
authored
Drop supports Node.js v8-10, v13 and v15 (#1588)
* Drop supports Node.js v8, v10, v13 and v15 * update * Update * update * update * Add check for engines * Update linter * update * update * update
1 parent 51079bf commit 7cd2839

File tree

9 files changed

+46
-271
lines changed

9 files changed

+46
-271
lines changed

.circleci/config.yml

+13-46
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ workflows:
22
version: 2
33
node-multi-build:
44
jobs:
5-
- node-v8
6-
- node-v10
5+
- eslint-v6
76
- eslint-v7
8-
- eslint-v8
97
- ts-eslint-v4
108
- node-v12
119
- node-v14
10+
- node-v16
1211
- lint
1312

1413
version: 2
@@ -35,9 +34,9 @@ jobs:
3534
# paths:
3635
# - node_modules
3736

38-
node-v8:
37+
eslint-v6:
3938
docker:
40-
- image: node:8
39+
- image: node:12
4140
steps:
4241
- run:
4342
name: Versions
@@ -46,25 +45,7 @@ jobs:
4645
- run:
4746
name: Install eslint@6
4847
command: |
49-
npm install --save-exact eslint@6.8.0 @typescript-eslint/parser@3.10.1 typescript@4.0.8
50-
- run:
51-
name: Install dependencies
52-
command: npm install
53-
- run:
54-
name: Test
55-
command: npm test
56-
node-v10:
57-
docker:
58-
- image: node:10
59-
steps:
60-
- run:
61-
name: Versions
62-
command: npm version
63-
- checkout
64-
- run:
65-
name: Install eslint@7 and @typescript-eslint/parser@4
66-
command: |
67-
npm install eslint@7 @typescript-eslint/parser@^4
48+
npm install --save-exact eslint@6.8.0
6849
- run:
6950
name: Install dependencies
7051
command: npm install
@@ -73,7 +54,7 @@ jobs:
7354
command: npm test
7455
eslint-v7:
7556
docker:
76-
- image: node:10
57+
- image: node:14
7758
steps:
7859
- run:
7960
name: Versions
@@ -89,24 +70,6 @@ jobs:
8970
- run:
9071
name: Test
9172
command: npm test
92-
eslint-v8:
93-
docker:
94-
- image: node:14
95-
steps:
96-
- run:
97-
name: Versions
98-
command: npm version
99-
- checkout
100-
- run:
101-
name: Install eslint@8
102-
command: |
103-
npm install eslint@^8.0.0-0
104-
- run:
105-
name: Install dependencies
106-
command: npm install
107-
- run:
108-
name: Test
109-
command: npm test
11073
ts-eslint-v4:
11174
docker:
11275
- image: node:14
@@ -116,9 +79,9 @@ jobs:
11679
command: npm version
11780
- checkout
11881
- run:
119-
name: Install @typescript-eslint/parser@4
82+
name: Install @typescript-eslint/parser@4 eslint@7
12083
command: |
121-
npm install @typescript-eslint/parser@^4
84+
npm install @typescript-eslint/parser@^4 eslint@7
12285
- run:
12386
name: Install dependencies
12487
command: npm install
@@ -133,6 +96,10 @@ jobs:
13396
<<: *node-base
13497
docker:
13598
- image: node:14
99+
node-v16:
100+
<<: *node-base
101+
docker:
102+
- image: node:16
136103

137104
lint:
138105
docker:
@@ -153,5 +120,5 @@ jobs:
153120
paths:
154121
- node_modules
155122
- run:
156-
name: Test
123+
name: Lint
157124
command: npm run lint

.eslintrc.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ module.exports = {
1010
node: true,
1111
mocha: true
1212
},
13-
extends: ['plugin:eslint-plugin/recommended', 'prettier'],
13+
extends: [
14+
'plugin:eslint-plugin/recommended',
15+
'prettier',
16+
'plugin:node-dependencies/recommended',
17+
'plugin:jsonc/recommended-with-jsonc'
18+
],
1419
plugins: ['eslint-plugin', 'prettier'],
1520
rules: {
1621
'accessor-pairs': 2,
@@ -142,6 +147,12 @@ module.exports = {
142147
'no-invalid-meta': 'error',
143148
'no-invalid-meta-docs-categories': 'error'
144149
}
150+
},
151+
{
152+
files: ['*.json'],
153+
rules: {
154+
'prettier/prettier': 'off'
155+
}
145156
}
146157
]
147158
}

.vscode/settings.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
"eslint.validate": [
77
"javascript",
88
"javascriptreact",
9-
"vue"
9+
"vue",
10+
"json",
11+
"jsonc"
1012
],
1113
"typescript.tsdk": "node_modules/typescript/lib",
1214
"vetur.validation.script": false,

docs/user-guide/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ yarn add -D eslint eslint-plugin-vue
2323
::: tip Requirements
2424

2525
- ESLint v6.2.0 and above
26-
- Node.js v8.10.0 and above
26+
- Node.js v12.22.x, v14.17.x, v16.x and above
2727

2828
:::
2929

eslint-internal-rules/.eslintrc.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,13 @@
22
"rules": {
33
"no-invalid-meta-docs-categories": "error",
44
"no-invalid-meta": "error"
5-
}
5+
},
6+
"overrides": [
7+
{
8+
"files": ["*.json"],
9+
"rules": {
10+
"no-invalid-meta": "off"
11+
}
12+
}
13+
]
614
}

lib/rules/no-unsupported-features.js

+1-206
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ module.exports = {
137137
* @returns {boolean} `true` if it's supporting.
138138
*/
139139
function isNotSupportingVersion(aCase) {
140-
return !semverSubset(versionRange, getSemverRange(aCase.supported))
140+
return !semver.subset(versionRange, getSemverRange(aCase.supported))
141141
}
142142

143143
/** @type {TemplateListener} */
@@ -171,208 +171,3 @@ module.exports = {
171171
)
172172
}
173173
}
174-
175-
// TODO replace semver.subset() in the major version.
176-
/**
177-
* semver.subset()
178-
*
179-
* We need to use a copy of the semver source code until a major version upgrade.
180-
*
181-
* @see https://github.com/npm/node-semver/blob/e79ac3a450e8bb504e78b8159e3efc70895699b8/ranges/subset.js#L43
182-
* @license ISC at Isaac Z. Schlueter and Contributors
183-
* https://github.com/npm/node-semver/blob/master/LICENSE
184-
*
185-
* @param {semver.Range} sub
186-
* @param {semver.Range} dom
187-
*/
188-
function semverSubset(sub, dom) {
189-
if (sub === dom) return true
190-
191-
sub = new semver.Range(sub)
192-
dom = new semver.Range(dom)
193-
let sawNonNull = false
194-
195-
// eslint-disable-next-line no-labels
196-
OUTER: for (const simpleSub of sub.set) {
197-
for (const simpleDom of dom.set) {
198-
const isSub = simpleSubset(simpleSub, simpleDom)
199-
sawNonNull = sawNonNull || isSub !== null
200-
// eslint-disable-next-line no-labels
201-
if (isSub) continue OUTER
202-
}
203-
if (sawNonNull) return false
204-
}
205-
return true
206-
}
207-
208-
/**
209-
* @license ISC at Isaac Z. Schlueter and Contributors
210-
* https://github.com/npm/node-semver/blob/master/LICENSE
211-
* @param {readonly semver.Comparator[]} sub
212-
* @param {readonly semver.Comparator[]} dom
213-
*/
214-
function simpleSubset(sub, dom) {
215-
if (sub === dom) return true
216-
217-
/**
218-
* @param {semver.Comparator} c
219-
*/
220-
function isAny(c) {
221-
return Object.keys(c.semver).length === 0
222-
}
223-
224-
if (sub.length === 1 && isAny(sub[0])) {
225-
if (dom.length === 1 && isAny(dom[0])) return true
226-
else sub = [new semver.Comparator('>=0.0.0')]
227-
}
228-
229-
if (dom.length === 1 && isAny(dom[0])) {
230-
dom = [new semver.Comparator('>=0.0.0')]
231-
}
232-
233-
const eqSet = new Set()
234-
let gt, lt
235-
for (const c of sub) {
236-
if (c.operator === '>' || c.operator === '>=') gt = higherGT(gt, c)
237-
else if (c.operator === '<' || c.operator === '<=') lt = lowerLT(lt, c)
238-
else eqSet.add(c.semver)
239-
}
240-
241-
if (eqSet.size > 1) return null
242-
243-
let gtltComp
244-
if (gt && lt) {
245-
gtltComp = semver.compare(gt.semver, lt.semver)
246-
if (gtltComp > 0) return null
247-
else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
248-
return null
249-
}
250-
251-
// will iterate one or zero times
252-
for (const eq of eqSet) {
253-
if (gt && !semver.satisfies(eq, String(gt))) return null
254-
255-
if (lt && !semver.satisfies(eq, String(lt))) return null
256-
257-
for (const c of dom) {
258-
if (!semver.satisfies(eq, String(c))) return false
259-
}
260-
261-
return true
262-
}
263-
264-
let higher, lower
265-
let hasDomLT, hasDomGT
266-
// if the subset has a prerelease, we need a comparator in the superset
267-
// with the same tuple and a prerelease, or it's not a subset
268-
let needDomLTPre = lt && lt.semver.prerelease.length ? lt.semver : false
269-
let needDomGTPre = gt && gt.semver.prerelease.length ? gt.semver : false
270-
// exception: <1.2.3-0 is the same as <1.2.3
271-
if (
272-
needDomLTPre &&
273-
needDomLTPre.prerelease.length === 1 &&
274-
lt &&
275-
lt.operator === '<' &&
276-
needDomLTPre.prerelease[0] === 0
277-
) {
278-
needDomLTPre = false
279-
}
280-
281-
for (const c of dom) {
282-
hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
283-
hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
284-
if (gt) {
285-
if (needDomGTPre) {
286-
if (
287-
c.semver.prerelease &&
288-
c.semver.prerelease.length &&
289-
c.semver.major === needDomGTPre.major &&
290-
c.semver.minor === needDomGTPre.minor &&
291-
c.semver.patch === needDomGTPre.patch
292-
) {
293-
needDomGTPre = false
294-
}
295-
}
296-
if (c.operator === '>' || c.operator === '>=') {
297-
higher = higherGT(gt, c)
298-
if (higher === c && higher !== gt) return false
299-
} else if (
300-
gt.operator === '>=' &&
301-
!semver.satisfies(gt.semver, String(c))
302-
)
303-
return false
304-
}
305-
if (lt) {
306-
if (needDomLTPre) {
307-
if (
308-
c.semver.prerelease &&
309-
c.semver.prerelease.length &&
310-
c.semver.major === needDomLTPre.major &&
311-
c.semver.minor === needDomLTPre.minor &&
312-
c.semver.patch === needDomLTPre.patch
313-
) {
314-
needDomLTPre = false
315-
}
316-
}
317-
if (c.operator === '<' || c.operator === '<=') {
318-
lower = lowerLT(lt, c)
319-
if (lower === c && lower !== lt) return false
320-
} else if (
321-
lt.operator === '<=' &&
322-
!semver.satisfies(lt.semver, String(c))
323-
)
324-
return false
325-
}
326-
if (!c.operator && (lt || gt) && gtltComp !== 0) return false
327-
}
328-
329-
// if there was a < or >, and nothing in the dom, then must be false
330-
// UNLESS it was limited by another range in the other direction.
331-
// Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
332-
if (gt && hasDomLT && !lt && gtltComp !== 0) return false
333-
334-
if (lt && hasDomGT && !gt && gtltComp !== 0) return false
335-
336-
// we needed a prerelease range in a specific tuple, but didn't get one
337-
// then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
338-
// because it includes prereleases in the 1.2.3 tuple
339-
if (needDomGTPre || needDomLTPre) return false
340-
341-
return true
342-
}
343-
344-
/**
345-
* @license ISC at Isaac Z. Schlueter and Contributors
346-
* https://github.com/npm/node-semver/blob/master/LICENSE
347-
* @param {semver.Comparator | void} a
348-
* @param {semver.Comparator} b
349-
*/
350-
const higherGT = (a, b) => {
351-
if (!a) return b
352-
const comp = semver.compare(a.semver, b.semver)
353-
return comp > 0
354-
? a
355-
: comp < 0
356-
? b
357-
: b.operator === '>' && a.operator === '>='
358-
? b
359-
: a
360-
}
361-
362-
/**
363-
* @license ISC at Isaac Z. Schlueter and Contributors
364-
* https://github.com/npm/node-semver/blob/master/LICENSE
365-
* @param {semver.Comparator | void} a
366-
* @param {semver.Comparator} b
367-
*/
368-
const lowerLT = (a, b) => {
369-
if (!a) return b
370-
const comp = semver.compare(a.semver, b.semver)
371-
return comp < 0
372-
? a
373-
: comp > 0
374-
? b
375-
: b.operator === '<' && a.operator === '<='
376-
? b
377-
: a
378-
}

0 commit comments

Comments
 (0)