Skip to content

Commit fd9d19d

Browse files
Lalem001mysticatea
authored andcommittedMay 23, 2019
no-deprecated-api adheres to targeted node version (fixes #141) (#164)
1 parent bc02c52 commit fd9d19d

File tree

3 files changed

+464
-62
lines changed

3 files changed

+464
-62
lines changed
 

‎docs/rules/no-deprecated-api.md

+28-1
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,48 @@ This rule reports the following deprecated API.
143143
> For example, `require("punycode")` still imports the deprecated core module even if you executed `npm install punycode`.
144144
> Use `require("punycode/")` to import userland modules rather than core modules.
145145
146+
### Configured Node.js version range
147+
148+
This rule reads the [engines] field of `package.json` to detect which Node.js versions your module is supporting.
149+
150+
I recommend the use of the [engines] field because it's the official way that indicates which Node.js versions your module is supporting.
151+
For example of `package.json`:
152+
153+
```json
154+
{
155+
"name": "your-module",
156+
"version": "1.0.0",
157+
"engines": {
158+
"node": ">=8.0.0"
159+
}
160+
}
161+
```
162+
163+
If you omit the [engines] field, this rule chooses `>=8.0.0` as the configured Node.js version since `8` is the minimum version the community is maintaining (see also [Node.js Release Working Group](https://github.com/nodejs/Release#readme)).
164+
146165
### Options
147166

148-
This rule has 2 options.
167+
This rule has 3 options.
149168

150169
```json
151170
{
152171
"rules": {
153172
"node/no-deprecated-api": ["error", {
173+
"version": ">=8.0.0",
154174
"ignoreModuleItems": [],
155175
"ignoreGlobalItems": []
156176
}]
157177
}
158178
}
159179
```
160180

181+
#### version
182+
183+
As mentioned above, this rule reads the [engines] field of `package.json`.
184+
But, you can overwrite the version by `version` option.
185+
186+
The `version` option accepts [the valid version range of `node-semver`](https://github.com/npm/node-semver#range-grammar).
187+
161188
#### ignoreModuleItems
162189

163190
This is the array of module names and module's member names.

‎lib/rules/no-deprecated-api.js

+293-61
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
const { CALL, CONSTRUCT, READ, ReferenceTracker } = require("eslint-utils")
88
const enumeratePropertyNames = require("../util/enumerate-property-names")
9+
const getConfiguredNodeVersion = require("../util/get-configured-node-version")
10+
const getSemverRange = require("../util/get-semver-range")
911

1012
const modules = {
1113
_linklist: {
@@ -19,28 +21,40 @@ const modules = {
1921
deepEqual: {
2022
[READ]: {
2123
since: "10.0.0",
22-
replacedBy:
23-
"'assert.deepStrictEqual' or 'assert.strict.deepEqual'",
24+
replacedBy: [
25+
{ name: "'assert.deepStrictEqual'", supported: "1.2.0" },
26+
{ name: "'assert.strict.deepEqual'", supported: "9.9.0" },
27+
],
2428
},
2529
},
2630
equal: {
2731
[READ]: {
2832
since: "10.0.0",
29-
replacedBy: "'assert.strictEqual' or 'assert.strict.equal'",
33+
replacedBy: [
34+
{ name: "'assert.strictEqual'", supported: "0.1.21" },
35+
{ name: "'assert.strict.equal'", supported: "9.9.0" },
36+
],
3037
},
3138
},
3239
notDeepEqual: {
3340
[READ]: {
3441
since: "10.0.0",
35-
replacedBy:
36-
"'assert.notDeepStrictEqual' or 'assert.strict.notDeepEqual'",
42+
replacedBy: [
43+
{ name: "'assert.notDeepStrictEqual'", supported: "1.2.0" },
44+
{
45+
name: "'assert.strict.notDeepEqual'",
46+
supported: "9.9.0",
47+
},
48+
],
3749
},
3850
},
3951
notEqual: {
4052
[READ]: {
4153
since: "10.0.0",
42-
replacedBy:
43-
"'assert.notStrictEqual' or 'assert.strict.notEqual'",
54+
replacedBy: [
55+
{ name: "'assert.notStrictEqual'", supported: "0.1.21" },
56+
{ name: "'assert.strict.notEqual'", supported: "9.9.0" },
57+
],
4458
},
4559
},
4660
},
@@ -49,7 +63,12 @@ const modules = {
4963
currentId: {
5064
[READ]: {
5165
since: "8.2.0",
52-
replacedBy: "'async_hooks.executionAsyncId()'",
66+
replacedBy: [
67+
{
68+
name: "'async_hooks.executionAsyncId()'",
69+
supported: "8.1.0",
70+
},
71+
],
5372
},
5473
},
5574
triggerId: {
@@ -63,17 +82,28 @@ const modules = {
6382
Buffer: {
6483
[CONSTRUCT]: {
6584
since: "6.0.0",
66-
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()'",
85+
replacedBy: [
86+
{ name: "'buffer.Buffer.alloc()'", supported: "5.10.0" },
87+
{ name: "'buffer.Buffer.from()'", supported: "5.10.0" },
88+
],
6789
},
6890
[CALL]: {
6991
since: "6.0.0",
70-
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()'",
92+
replacedBy: [
93+
{ name: "'buffer.Buffer.alloc()'", supported: "5.10.0" },
94+
{ name: "'buffer.Buffer.from()'", supported: "5.10.0" },
95+
],
7196
},
7297
},
7398
SlowBuffer: {
7499
[READ]: {
75100
since: "6.0.0",
76-
replacedBy: "'buffer.Buffer.allocUnsafeSlow()'",
101+
replacedBy: [
102+
{
103+
name: "'buffer.Buffer.allocUnsafeSlow()'",
104+
supported: "5.12.0",
105+
},
106+
],
77107
},
78108
},
79109
},
@@ -96,35 +126,67 @@ const modules = {
96126
createCipher: {
97127
[READ]: {
98128
since: "10.0.0",
99-
replacedBy: "'crypto.createCipheriv()'",
129+
replacedBy: [
130+
{ name: "'crypto.createCipheriv()'", supported: "0.1.94" },
131+
],
100132
},
101133
},
102134
createCredentials: {
103135
[READ]: {
104136
since: "0.12.0",
105-
replacedBy: "'tls.createSecureContext()'",
137+
replacedBy: [
138+
{
139+
name: "'tls.createSecureContext()'",
140+
supported: "0.11.13",
141+
},
142+
],
106143
},
107144
},
108145
createDecipher: {
109146
[READ]: {
110147
since: "10.0.0",
111-
replacedBy: "'crypto.createDecipheriv()'",
148+
replacedBy: [
149+
{
150+
name: "'crypto.createDecipheriv()'",
151+
supported: "0.1.94",
152+
},
153+
],
112154
},
113155
},
114156
fips: {
115157
[READ]: {
116158
since: "10.0.0",
117-
replacedBy: "'crypto.getFips()' and 'crypto.setFips()'",
159+
replacedBy: [
160+
{
161+
name: "'crypto.getFips()' and 'crypto.setFips()'",
162+
supported: "10.0.0",
163+
},
164+
],
118165
},
119166
},
120167
prng: {
121-
[READ]: { since: "11.0.0", replacedBy: "'crypto.randomBytes()'" },
168+
[READ]: {
169+
since: "11.0.0",
170+
replacedBy: [
171+
{ name: "'crypto.randomBytes()'", supported: "0.5.8" },
172+
],
173+
},
122174
},
123175
pseudoRandomBytes: {
124-
[READ]: { since: "11.0.0", replacedBy: "'crypto.randomBytes()'" },
176+
[READ]: {
177+
since: "11.0.0",
178+
replacedBy: [
179+
{ name: "'crypto.randomBytes()'", supported: "0.5.8" },
180+
],
181+
},
125182
},
126183
rng: {
127-
[READ]: { since: "11.0.0", replacedBy: "'crypto.randomBytes()'" },
184+
[READ]: {
185+
since: "11.0.0",
186+
replacedBy: [
187+
{ name: "'crypto.randomBytes()'", supported: "0.5.8" },
188+
],
189+
},
128190
},
129191
},
130192
domain: {
@@ -135,14 +197,24 @@ const modules = {
135197
listenerCount: {
136198
[READ]: {
137199
since: "4.0.0",
138-
replacedBy: "'events.EventEmitter#listenerCount()'",
200+
replacedBy: [
201+
{
202+
name: "'events.EventEmitter#listenerCount()'",
203+
supported: "3.2.0",
204+
},
205+
],
139206
},
140207
},
141208
},
142209
listenerCount: {
143210
[READ]: {
144211
since: "4.0.0",
145-
replacedBy: "'events.EventEmitter#listenerCount()'",
212+
replacedBy: [
213+
{
214+
name: "'events.EventEmitter#listenerCount()'",
215+
supported: "3.2.0",
216+
},
217+
],
146218
},
147219
},
148220
},
@@ -156,7 +228,10 @@ const modules = {
156228
exists: {
157229
[READ]: {
158230
since: "4.0.0",
159-
replacedBy: "'fs.stat()' or 'fs.access()'",
231+
replacedBy: [
232+
{ name: "'fs.stat()'", supported: "0.0.2" },
233+
{ name: "'fs.access()'", supported: "0.11.15" },
234+
],
160235
},
161236
},
162237
lchmod: {
@@ -174,20 +249,29 @@ const modules = {
174249
},
175250
http: {
176251
createClient: {
177-
[READ]: { since: "0.10.0", replacedBy: "'http.request()'" },
252+
[READ]: {
253+
since: "0.10.0",
254+
replacedBy: [{ name: "'http.request()'", supported: "0.3.6" }],
255+
},
178256
},
179257
},
180258
module: {
181259
Module: {
182260
requireRepl: {
183-
[READ]: { since: "6.0.0", replacedBy: "'require(\"repl\")'" },
261+
[READ]: {
262+
since: "6.0.0",
263+
replacedBy: "'require(\"repl\")'",
264+
},
184265
},
185266
_debug: {
186267
[READ]: { since: "9.0.0", replacedBy: null },
187268
},
188269
},
189270
requireRepl: {
190-
[READ]: { since: "6.0.0", replacedBy: "'require(\"repl\")'" },
271+
[READ]: {
272+
since: "6.0.0",
273+
replacedBy: "'require(\"repl\")'",
274+
},
191275
},
192276
_debug: {
193277
[READ]: { since: "9.0.0", replacedBy: null },
@@ -200,30 +284,52 @@ const modules = {
200284
},
201285
os: {
202286
getNetworkInterfaces: {
203-
[READ]: { since: "0.6.0", replacedBy: "'os.networkInterfaces()'" },
287+
[READ]: {
288+
since: "0.6.0",
289+
replacedBy: [
290+
{ name: "'os.networkInterfaces()'", supported: "0.6.0" },
291+
],
292+
},
204293
},
205294
tmpDir: {
206-
[READ]: { since: "7.0.0", replacedBy: "'os.tmpdir()'" },
295+
[READ]: {
296+
since: "7.0.0",
297+
replacedBy: [{ name: "'os.tmpdir()'", supported: "0.9.9" }],
298+
},
207299
},
208300
},
209301
path: {
210302
_makeLong: {
211-
[READ]: { since: "9.0.0", replacedBy: "'path.toNamespacedPath()'" },
303+
[READ]: {
304+
since: "9.0.0",
305+
replacedBy: [
306+
{ name: "'path.toNamespacedPath()'", supported: "9.0.0" },
307+
],
308+
},
212309
},
213310
},
214311
process: {
215312
EventEmitter: {
216-
[READ]: { since: "0.6.0", replacedBy: "'require(\"events\")'" },
313+
[READ]: {
314+
since: "0.6.0",
315+
replacedBy: "'require(\"events\")'",
316+
},
217317
},
218318
assert: {
219-
[READ]: { since: "10.0.0", replacedBy: "'require(\"assert\")'" },
319+
[READ]: {
320+
since: "10.0.0",
321+
replacedBy: "'require(\"assert\")'",
322+
},
220323
},
221324
binding: {
222325
[READ]: { since: "10.9.0", replacedBy: null },
223326
},
224327
env: {
225328
NODE_REPL_HISTORY_FILE: {
226-
[READ]: { since: "4.0.0", replacedBy: "'NODE_REPL_HISTORY'" },
329+
[READ]: {
330+
since: "4.0.0",
331+
replacedBy: "'NODE_REPL_HISTORY'",
332+
},
227333
},
228334
},
229335
report: {
@@ -261,34 +367,54 @@ const modules = {
261367
Buffer: {
262368
[CONSTRUCT]: {
263369
since: "6.0.0",
264-
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()'",
370+
replacedBy: [
371+
{ name: "'buffer.Buffer.alloc()'", supported: "5.10.0" },
372+
{ name: "'buffer.Buffer.from()'", supported: "5.10.0" },
373+
],
265374
},
266375
[CALL]: {
267376
since: "6.0.0",
268-
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()'",
377+
replacedBy: [
378+
{ name: "'buffer.Buffer.alloc()'", supported: "5.10.0" },
379+
{ name: "'buffer.Buffer.from()'", supported: "5.10.0" },
380+
],
269381
},
270382
},
271383
SlowBuffer: {
272384
[READ]: {
273385
since: "6.0.0",
274-
replacedBy: "'buffer.Buffer.allocUnsafeSlow()'",
386+
replacedBy: [
387+
{
388+
name: "'buffer.Buffer.allocUnsafeSlow()'",
389+
supported: "5.12.0",
390+
},
391+
],
275392
},
276393
},
277394
},
278395
sys: {
279-
[READ]: { since: "0.3.0", replacedBy: "'util' module" },
396+
[READ]: {
397+
since: "0.3.0",
398+
replacedBy: "'util' module",
399+
},
280400
},
281401
timers: {
282402
enroll: {
283403
[READ]: {
284404
since: "10.0.0",
285-
replacedBy: "'setTimeout()' or 'setInterval()'",
405+
replacedBy: [
406+
{ name: "'setTimeout()'", supported: "0.0.1" },
407+
{ name: "'setInterval()'", supported: "0.0.1" },
408+
],
286409
},
287410
},
288411
unenroll: {
289412
[READ]: {
290413
since: "10.0.0",
291-
replacedBy: "'clearTimeout()' or 'clearInterval()'",
414+
replacedBy: [
415+
{ name: "'clearTimeout()'", supported: "0.0.1" },
416+
{ name: "'clearInterval()'", supported: "0.0.1" },
417+
],
292418
},
293419
},
294420
},
@@ -297,19 +423,33 @@ const modules = {
297423
[READ]: { since: "0.10.0", replacedBy: null },
298424
},
299425
CryptoStream: {
300-
[READ]: { since: "0.12.0", replacedBy: "'tls.TLSSocket'" },
426+
[READ]: {
427+
since: "0.12.0",
428+
replacedBy: [{ name: "'tls.TLSSocket'", supported: "0.11.4" }],
429+
},
301430
},
302431
SecurePair: {
303-
[READ]: { since: "6.0.0", replacedBy: "'tls.TLSSocket'" },
432+
[READ]: {
433+
since: "6.0.0",
434+
replacedBy: [{ name: "'tls.TLSSocket'", supported: "0.11.4" }],
435+
},
304436
},
305437
convertNPNProtocols: {
306438
[READ]: { since: "10.0.0", replacedBy: null },
307439
},
308440
createSecurePair: {
309-
[READ]: { since: "6.0.0", replacedBy: "'tls.TLSSocket'" },
441+
[READ]: {
442+
since: "6.0.0",
443+
replacedBy: [{ name: "'tls.TLSSocket'", supported: "0.11.4" }],
444+
},
310445
},
311446
parseCertString: {
312-
[READ]: { since: "8.6.0", replacedBy: "'querystring.parse()'" },
447+
[READ]: {
448+
since: "8.6.0",
449+
replacedBy: [
450+
{ name: "'querystring.parse()'", supported: "0.1.25" },
451+
],
452+
},
313453
},
314454
},
315455
tty: {
@@ -323,27 +463,57 @@ const modules = {
323463
},
324464
url: {
325465
parse: {
326-
[READ]: { since: "11.0.0", replacedBy: "'url.URL' constructor" },
466+
[READ]: {
467+
since: "11.0.0",
468+
replacedBy: [
469+
{ name: "'url.URL' constructor", supported: "6.13.0" },
470+
],
471+
},
327472
},
328473
resolve: {
329-
[READ]: { since: "11.0.0", replacedBy: "'url.URL' constructor" },
474+
[READ]: {
475+
since: "11.0.0",
476+
replacedBy: [
477+
{ name: "'url.URL' constructor", supported: "6.13.0" },
478+
],
479+
},
330480
},
331481
},
332482
util: {
333483
debug: {
334-
[READ]: { since: "0.12.0", replacedBy: "'console.error()'" },
484+
[READ]: {
485+
since: "0.12.0",
486+
replacedBy: [
487+
{ name: "'console.error()'", supported: "0.1.100" },
488+
],
489+
},
335490
},
336491
error: {
337-
[READ]: { since: "0.12.0", replacedBy: "'console.error()'" },
492+
[READ]: {
493+
since: "0.12.0",
494+
replacedBy: [
495+
{ name: "'console.error()'", supported: "0.1.100" },
496+
],
497+
},
338498
},
339499
isArray: {
340-
[READ]: { since: "4.0.0", replacedBy: "'Array.isArray()'" },
500+
[READ]: {
501+
since: "4.0.0",
502+
replacedBy: [
503+
{ name: "'Array.isArray()'", supported: "0.1.100" },
504+
],
505+
},
341506
},
342507
isBoolean: {
343508
[READ]: { since: "4.0.0", replacedBy: null },
344509
},
345510
isBuffer: {
346-
[READ]: { since: "4.0.0", replacedBy: "'Buffer.isBuffer()'" },
511+
[READ]: {
512+
since: "4.0.0",
513+
replacedBy: [
514+
{ name: "'Buffer.isBuffer()'", supported: "0.1.101" },
515+
],
516+
},
347517
},
348518
isDate: {
349519
[READ]: { since: "4.0.0", replacedBy: null },
@@ -385,16 +555,30 @@ const modules = {
385555
[READ]: { since: "6.0.0", replacedBy: "a third party module" },
386556
},
387557
print: {
388-
[READ]: { since: "0.12.0", replacedBy: "'console.log()'" },
558+
[READ]: {
559+
since: "0.12.0",
560+
replacedBy: [{ name: "'console.log()'", supported: "0.1.100" }],
561+
},
389562
},
390563
pump: {
391-
[READ]: { since: "0.10.0", replacedBy: "'stream.Readable#pipe()'" },
564+
[READ]: {
565+
since: "0.10.0",
566+
replacedBy: [
567+
{ name: "'stream.Readable#pipe()'", supported: "0.9.4" },
568+
],
569+
},
392570
},
393571
puts: {
394-
[READ]: { since: "0.12.0", replacedBy: "'console.log()'" },
572+
[READ]: {
573+
since: "0.12.0",
574+
replacedBy: [{ name: "'console.log()'", supported: "0.1.100" }],
575+
},
395576
},
396577
_extend: {
397-
[READ]: { since: "6.0.0", replacedBy: "'Object.assign()'" },
578+
[READ]: {
579+
since: "6.0.0",
580+
replacedBy: [{ name: "'Object.assign()'", supported: "4.0.0" }],
581+
},
398582
},
399583
},
400584
vm: {
@@ -407,11 +591,17 @@ const globals = {
407591
Buffer: {
408592
[CONSTRUCT]: {
409593
since: "6.0.0",
410-
replacedBy: "'Buffer.alloc()' or 'Buffer.from()'",
594+
replacedBy: [
595+
{ name: "'Buffer.alloc()'", supported: "5.10.0" },
596+
{ name: "'Buffer.from()'", supported: "5.10.0" },
597+
],
411598
},
412599
[CALL]: {
413600
since: "6.0.0",
414-
replacedBy: "'Buffer.alloc()' or 'Buffer.from()'",
601+
replacedBy: [
602+
{ name: "'Buffer.alloc()'", supported: "5.10.0" },
603+
{ name: "'Buffer.from()'", supported: "5.10.0" },
604+
],
415605
},
416606
},
417607
COUNTER_NET_SERVER_CONNECTION: {
@@ -433,7 +623,10 @@ const globals = {
433623
[READ]: { since: "11.0.0", replacedBy: null },
434624
},
435625
GLOBAL: {
436-
[READ]: { since: "6.0.0", replacedBy: "'global'" },
626+
[READ]: {
627+
since: "6.0.0",
628+
replacedBy: [{ name: "'global'", supported: "0.1.27" }],
629+
},
437630
},
438631
Intl: {
439632
v8BreakIterator: {
@@ -449,19 +642,37 @@ const globals = {
449642
},
450643
},
451644
root: {
452-
[READ]: { since: "6.0.0", replacedBy: "'global'" },
645+
[READ]: {
646+
since: "6.0.0",
647+
replacedBy: [{ name: "'global'", supported: "0.1.27" }],
648+
},
453649
},
454650
process: modules.process,
455651
}
456652

457653
/**
458654
* Makes a replacement message.
459655
*
460-
* @param {string|null} replacedBy - The text of substitute way.
656+
* @param {string|array|null} replacedBy - The text of substitute way.
657+
* @param {Range} version - The configured version range
461658
* @returns {string} Replacement message.
462659
*/
463-
function toReplaceMessage(replacedBy) {
464-
return replacedBy ? `. Use ${replacedBy} instead` : ""
660+
function toReplaceMessage(replacedBy, version) {
661+
let message = replacedBy
662+
663+
if (Array.isArray(replacedBy)) {
664+
message = replacedBy
665+
.reduce(
666+
(collector, { name, supported }) =>
667+
version.intersects(getSemverRange(`>=${supported}`))
668+
? collector.concat(name)
669+
: collector,
670+
[]
671+
)
672+
.join(" or ")
673+
}
674+
675+
return message ? `. Use ${message} instead` : ""
465676
}
466677

467678
/**
@@ -479,6 +690,22 @@ function toName(type, path) {
479690
: baseName
480691
}
481692

693+
/**
694+
* Parses the options.
695+
* @param {RuleContext} context The rule context.
696+
* @returns {{version:Range,ignoredGlobalItems:Set<string>,ignoredModuleItems:Set<string>}} Parsed
697+
* value.
698+
*/
699+
function parseOptions(context) {
700+
const raw = context.options[0] || {}
701+
const filePath = context.getFilename()
702+
const version = getConfiguredNodeVersion(raw.version, filePath)
703+
const ignoredModuleItems = new Set(raw.ignoreModuleItems || [])
704+
const ignoredGlobalItems = new Set(raw.ignoreGlobalItems || [])
705+
706+
return Object.freeze({ version, ignoredGlobalItems, ignoredModuleItems })
707+
}
708+
482709
module.exports = {
483710
meta: {
484711
docs: {
@@ -494,6 +721,9 @@ module.exports = {
494721
{
495722
type: "object",
496723
properties: {
724+
version: {
725+
type: "string",
726+
},
497727
ignoreModuleItems: {
498728
type: "array",
499729
items: {
@@ -519,9 +749,11 @@ module.exports = {
519749
],
520750
},
521751
create(context) {
522-
const options = context.options[0] || {}
523-
const ignoredModuleItems = new Set(options.ignoreModuleItems || [])
524-
const ignoredGlobalItems = new Set(options.ignoreGlobalItems || [])
752+
const {
753+
ignoredModuleItems,
754+
ignoredGlobalItems,
755+
version,
756+
} = parseOptions(context)
525757

526758
/**
527759
* Reports a use of a deprecated API.
@@ -540,7 +772,7 @@ module.exports = {
540772
data: {
541773
name,
542774
version: info.since,
543-
replace: toReplaceMessage(info.replacedBy),
775+
replace: toReplaceMessage(info.replacedBy, version),
544776
},
545777
})
546778
}

‎tests/lib/rules/no-deprecated-api.js

+143
Original file line numberDiff line numberDiff line change
@@ -182,41 +182,47 @@ ruleTester.run("no-deprecated-api", rule, {
182182
//----------------------------------------------------------------------
183183
{
184184
code: "new (require('buffer').Buffer)()",
185+
options: [{ version: "6.0.0" }],
185186
env: { node: true },
186187
errors: [
187188
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
188189
],
189190
},
190191
{
191192
code: "require('buffer').Buffer()",
193+
options: [{ version: "6.0.0" }],
192194
env: { node: true },
193195
errors: [
194196
"'buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
195197
],
196198
},
197199
{
198200
code: "var b = require('buffer'); new b.Buffer()",
201+
options: [{ version: "6.0.0" }],
199202
env: { node: true },
200203
errors: [
201204
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
202205
],
203206
},
204207
{
205208
code: "var b = require('buffer'); new b['Buffer']()",
209+
options: [{ version: "6.0.0" }],
206210
env: { node: true },
207211
errors: [
208212
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
209213
],
210214
},
211215
{
212216
code: "var b = require('buffer'); new b[`Buffer`]()",
217+
options: [{ version: "6.0.0" }],
213218
env: { node: true, es6: true },
214219
errors: [
215220
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
216221
],
217222
},
218223
{
219224
code: "var b = require('buffer').Buffer; new b()",
225+
options: [{ version: "6.0.0" }],
220226
env: { node: true },
221227
errors: [
222228
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
@@ -225,6 +231,7 @@ ruleTester.run("no-deprecated-api", rule, {
225231
{
226232
code:
227233
"var b; new ((b = require('buffer')).Buffer)(); new b.Buffer()",
234+
options: [{ version: "6.0.0" }],
228235
env: { node: true },
229236
errors: [
230237
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
@@ -233,48 +240,55 @@ ruleTester.run("no-deprecated-api", rule, {
233240
},
234241
{
235242
code: "var {Buffer: b} = require('buffer'); new b()",
243+
options: [{ version: "6.0.0" }],
236244
env: { node: true, es6: true },
237245
errors: [
238246
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
239247
],
240248
},
241249
{
242250
code: "var {['Buffer']: b = null} = require('buffer'); new b()",
251+
options: [{ version: "6.0.0" }],
243252
env: { node: true, es6: true },
244253
errors: [
245254
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
246255
],
247256
},
248257
{
249258
code: "var {'Buffer': b = null} = require('buffer'); new b()",
259+
options: [{ version: "6.0.0" }],
250260
env: { node: true, es6: true },
251261
errors: [
252262
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
253263
],
254264
},
255265
{
256266
code: "var {Buffer: b = require('buffer').Buffer} = {}; new b()",
267+
options: [{ version: "6.0.0" }],
257268
env: { node: true, es6: true },
258269
errors: [
259270
"'new buffer.Buffer()' was deprecated since v6.0.0. Use 'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' instead.",
260271
],
261272
},
262273
{
263274
code: "require('buffer').SlowBuffer",
275+
options: [{ version: "6.0.0" }],
264276
env: { node: true },
265277
errors: [
266278
"'buffer.SlowBuffer' was deprecated since v6.0.0. Use 'buffer.Buffer.allocUnsafeSlow()' instead.",
267279
],
268280
},
269281
{
270282
code: "var b = require('buffer'); b.SlowBuffer",
283+
options: [{ version: "6.0.0" }],
271284
env: { node: true },
272285
errors: [
273286
"'buffer.SlowBuffer' was deprecated since v6.0.0. Use 'buffer.Buffer.allocUnsafeSlow()' instead.",
274287
],
275288
},
276289
{
277290
code: "var {SlowBuffer: b} = require('buffer');",
291+
options: [{ version: "6.0.0" }],
278292
env: { node: true, es6: true },
279293
errors: [
280294
"'buffer.SlowBuffer' was deprecated since v6.0.0. Use 'buffer.Buffer.allocUnsafeSlow()' instead.",
@@ -284,367 +298,474 @@ ruleTester.run("no-deprecated-api", rule, {
284298
//----------------------------------------------------------------------
285299
{
286300
code: "require('_linklist');",
301+
options: [{ version: "5.0.0" }],
287302
env: { node: true },
288303
errors: ["'_linklist' module was deprecated since v5.0.0."],
289304
},
305+
{
306+
code: "require('assert').deepEqual",
307+
options: [{ version: "10.0.0" }],
308+
env: { node: true },
309+
errors: [
310+
"'assert.deepEqual' was deprecated since v10.0.0. Use 'assert.deepStrictEqual' or 'assert.strict.deepEqual' instead.",
311+
],
312+
},
313+
// https://github.com/mysticatea/eslint-plugin-node/issues/141
314+
{
315+
code: "require('assert').deepEqual",
316+
options: [{ version: "6.0.0" }],
317+
env: { node: true },
318+
errors: [
319+
"'assert.deepEqual' was deprecated since v10.0.0. Use 'assert.deepStrictEqual' instead.",
320+
],
321+
},
322+
{
323+
code: "require('assert').deepEqual",
324+
options: [{ version: "1.0.0" }],
325+
env: { node: true },
326+
errors: ["'assert.deepEqual' was deprecated since v10.0.0."],
327+
},
328+
{
329+
code: "require('assert').equal",
330+
options: [{ version: "10.0.0" }],
331+
env: { node: true },
332+
errors: [
333+
"'assert.equal' was deprecated since v10.0.0. Use 'assert.strictEqual' or 'assert.strict.equal' instead.",
334+
],
335+
},
336+
{
337+
code: "require('assert').notDeepEqual",
338+
options: [{ version: "10.0.0" }],
339+
env: { node: true },
340+
errors: [
341+
"'assert.notDeepEqual' was deprecated since v10.0.0. Use 'assert.notDeepStrictEqual' or 'assert.strict.notDeepEqual' instead.",
342+
],
343+
},
344+
{
345+
code: "require('assert').notEqual",
346+
options: [{ version: "10.0.0" }],
347+
env: { node: true },
348+
errors: [
349+
"'assert.notEqual' was deprecated since v10.0.0. Use 'assert.notStrictEqual' or 'assert.strict.notEqual' instead.",
350+
],
351+
},
290352
{
291353
code: "require('async_hooks').currentId;",
354+
options: [{ version: "8.2.0" }],
292355
env: { node: true },
293356
errors: [
294357
"'async_hooks.currentId' was deprecated since v8.2.0. Use 'async_hooks.executionAsyncId()' instead.",
295358
],
296359
},
297360
{
298361
code: "require('async_hooks').triggerId;",
362+
options: [{ version: "8.2.0" }],
299363
env: { node: true },
300364
errors: [
301365
"'async_hooks.triggerId' was deprecated since v8.2.0. Use 'async_hooks.triggerAsyncId()' instead.",
302366
],
303367
},
304368
{
305369
code: "require('constants');",
370+
options: [{ version: "6.3.0" }],
306371
env: { node: true },
307372
errors: [
308373
"'constants' module was deprecated since v6.3.0. Use 'constants' property of each module instead.",
309374
],
310375
},
311376
{
312377
code: "require('crypto').Credentials;",
378+
options: [{ version: "0.12.0" }],
313379
env: { node: true },
314380
errors: [
315381
"'crypto.Credentials' was deprecated since v0.12.0. Use 'tls.SecureContext' instead.",
316382
],
317383
},
318384
{
319385
code: "require('crypto').createCredentials;",
386+
options: [{ version: "0.12.0" }],
320387
env: { node: true },
321388
errors: [
322389
"'crypto.createCredentials' was deprecated since v0.12.0. Use 'tls.createSecureContext()' instead.",
323390
],
324391
},
325392
{
326393
code: "require('domain');",
394+
options: [{ version: "4.0.0" }],
327395
env: { node: true },
328396
errors: ["'domain' module was deprecated since v4.0.0."],
329397
},
330398
{
331399
code: "require('events').EventEmitter.listenerCount;",
400+
options: [{ version: "4.0.0" }],
332401
env: { node: true },
333402
errors: [
334403
"'events.EventEmitter.listenerCount' was deprecated since v4.0.0. Use 'events.EventEmitter#listenerCount()' instead.",
335404
],
336405
},
337406
{
338407
code: "require('events').listenerCount;",
408+
options: [{ version: "4.0.0" }],
339409
env: { node: true },
340410
errors: [
341411
"'events.listenerCount' was deprecated since v4.0.0. Use 'events.EventEmitter#listenerCount()' instead.",
342412
],
343413
},
344414
{
345415
code: "require('freelist');",
416+
options: [{ version: "4.0.0" }],
346417
env: { node: true },
347418
errors: ["'freelist' module was deprecated since v4.0.0."],
348419
},
349420
{
350421
code: "require('fs').SyncWriteStream;",
422+
options: [{ version: "4.0.0" }],
351423
env: { node: true },
352424
errors: ["'fs.SyncWriteStream' was deprecated since v4.0.0."],
353425
},
354426
{
355427
code: "require('fs').exists;",
428+
options: [{ version: "4.0.0" }],
356429
env: { node: true },
357430
errors: [
358431
"'fs.exists' was deprecated since v4.0.0. Use 'fs.stat()' or 'fs.access()' instead.",
359432
],
360433
},
361434
{
362435
code: "require('fs').lchmod;",
436+
options: [{ version: "0.4.0" }],
363437
env: { node: true },
364438
errors: ["'fs.lchmod' was deprecated since v0.4.0."],
365439
},
366440
{
367441
code: "require('fs').lchmodSync;",
442+
options: [{ version: "0.4.0" }],
368443
env: { node: true },
369444
errors: ["'fs.lchmodSync' was deprecated since v0.4.0."],
370445
},
371446
{
372447
code: "require('fs').lchown;",
448+
options: [{ version: "0.4.0" }],
373449
env: { node: true },
374450
errors: ["'fs.lchown' was deprecated since v0.4.0."],
375451
},
376452
{
377453
code: "require('fs').lchownSync;",
454+
options: [{ version: "0.4.0" }],
378455
env: { node: true },
379456
errors: ["'fs.lchownSync' was deprecated since v0.4.0."],
380457
},
381458
{
382459
code: "require('http').createClient;",
460+
options: [{ version: "0.10.0" }],
383461
env: { node: true },
384462
errors: [
385463
"'http.createClient' was deprecated since v0.10.0. Use 'http.request()' instead.",
386464
],
387465
},
388466
{
389467
code: "require('module').requireRepl;",
468+
options: [{ version: "6.0.0" }],
390469
env: { node: true },
391470
errors: [
392471
"'module.requireRepl' was deprecated since v6.0.0. Use 'require(\"repl\")' instead.",
393472
],
394473
},
395474
{
396475
code: "require('module').Module.requireRepl;",
476+
options: [{ version: "6.0.0" }],
397477
env: { node: true },
398478
errors: [
399479
"'module.Module.requireRepl' was deprecated since v6.0.0. Use 'require(\"repl\")' instead.",
400480
],
401481
},
402482
{
403483
code: "require('module')._debug;",
484+
options: [{ version: "9.0.0" }],
404485
env: { node: true },
405486
errors: ["'module._debug' was deprecated since v9.0.0."],
406487
},
407488
{
408489
code: "require('module').Module._debug;",
490+
options: [{ version: "9.0.0" }],
409491
env: { node: true },
410492
errors: ["'module.Module._debug' was deprecated since v9.0.0."],
411493
},
412494
{
413495
code: "require('os').getNetworkInterfaces;",
496+
options: [{ version: "0.6.0" }],
414497
env: { node: true },
415498
errors: [
416499
"'os.getNetworkInterfaces' was deprecated since v0.6.0. Use 'os.networkInterfaces()' instead.",
417500
],
418501
},
419502
{
420503
code: "require('os').tmpDir;",
504+
options: [{ version: "7.0.0" }],
421505
env: { node: true },
422506
errors: [
423507
"'os.tmpDir' was deprecated since v7.0.0. Use 'os.tmpdir()' instead.",
424508
],
425509
},
426510
{
427511
code: "require('path')._makeLong;",
512+
options: [{ version: "9.0.0" }],
428513
env: { node: true },
429514
errors: [
430515
"'path._makeLong' was deprecated since v9.0.0. Use 'path.toNamespacedPath()' instead.",
431516
],
432517
},
433518
{
434519
code: "require('punycode');",
520+
options: [{ version: "7.0.0" }],
435521
env: { node: true },
436522
errors: [
437523
"'punycode' module was deprecated since v7.0.0. Use 'https://www.npmjs.com/package/punycode' instead.",
438524
],
439525
},
440526
{
441527
code: "require('readline').codePointAt;",
528+
options: [{ version: "4.0.0" }],
442529
env: { node: true },
443530
errors: ["'readline.codePointAt' was deprecated since v4.0.0."],
444531
},
445532
{
446533
code: "require('readline').getStringWidth;",
534+
options: [{ version: "6.0.0" }],
447535
env: { node: true },
448536
errors: ["'readline.getStringWidth' was deprecated since v6.0.0."],
449537
},
450538
{
451539
code: "require('readline').isFullWidthCodePoint;",
540+
options: [{ version: "6.0.0" }],
452541
env: { node: true },
453542
errors: [
454543
"'readline.isFullWidthCodePoint' was deprecated since v6.0.0.",
455544
],
456545
},
457546
{
458547
code: "require('readline').stripVTControlCharacters;",
548+
options: [{ version: "6.0.0" }],
459549
env: { node: true },
460550
errors: [
461551
"'readline.stripVTControlCharacters' was deprecated since v6.0.0.",
462552
],
463553
},
464554
{
465555
code: "require('sys');",
556+
options: [{ version: "0.3.0" }],
466557
env: { node: true },
467558
errors: [
468559
"'sys' module was deprecated since v0.3.0. Use 'util' module instead.",
469560
],
470561
},
471562
{
472563
code: "require('tls').CleartextStream;",
564+
options: [{ version: "0.10.0" }],
473565
env: { node: true },
474566
errors: ["'tls.CleartextStream' was deprecated since v0.10.0."],
475567
},
476568
{
477569
code: "require('tls').CryptoStream;",
570+
options: [{ version: "0.12.0" }],
478571
env: { node: true },
479572
errors: [
480573
"'tls.CryptoStream' was deprecated since v0.12.0. Use 'tls.TLSSocket' instead.",
481574
],
482575
},
483576
{
484577
code: "require('tls').SecurePair;",
578+
options: [{ version: "6.0.0" }],
485579
env: { node: true },
486580
errors: [
487581
"'tls.SecurePair' was deprecated since v6.0.0. Use 'tls.TLSSocket' instead.",
488582
],
489583
},
490584
{
491585
code: "require('tls').createSecurePair;",
586+
options: [{ version: "6.0.0" }],
492587
env: { node: true },
493588
errors: [
494589
"'tls.createSecurePair' was deprecated since v6.0.0. Use 'tls.TLSSocket' instead.",
495590
],
496591
},
497592
{
498593
code: "require('tls').parseCertString;",
594+
options: [{ version: "8.6.0" }],
499595
env: { node: true },
500596
errors: [
501597
"'tls.parseCertString' was deprecated since v8.6.0. Use 'querystring.parse()' instead.",
502598
],
503599
},
504600
{
505601
code: "require('tty').setRawMode;",
602+
options: [{ version: "0.10.0" }],
506603
env: { node: true },
507604
errors: [
508605
"'tty.setRawMode' was deprecated since v0.10.0. Use 'tty.ReadStream#setRawMode()' (e.g. 'process.stdin.setRawMode()') instead.",
509606
],
510607
},
511608
{
512609
code: "require('util').debug;",
610+
options: [{ version: "0.12.0" }],
513611
env: { node: true },
514612
errors: [
515613
"'util.debug' was deprecated since v0.12.0. Use 'console.error()' instead.",
516614
],
517615
},
518616
{
519617
code: "require('util').error;",
618+
options: [{ version: "0.12.0" }],
520619
env: { node: true },
521620
errors: [
522621
"'util.error' was deprecated since v0.12.0. Use 'console.error()' instead.",
523622
],
524623
},
525624
{
526625
code: "require('util').isArray;",
626+
options: [{ version: "4.0.0" }],
527627
env: { node: true },
528628
errors: [
529629
"'util.isArray' was deprecated since v4.0.0. Use 'Array.isArray()' instead.",
530630
],
531631
},
532632
{
533633
code: "require('util').isBoolean;",
634+
options: [{ version: "4.0.0" }],
534635
env: { node: true },
535636
errors: ["'util.isBoolean' was deprecated since v4.0.0."],
536637
},
537638
{
538639
code: "require('util').isBuffer;",
640+
options: [{ version: "4.0.0" }],
539641
env: { node: true },
540642
errors: [
541643
"'util.isBuffer' was deprecated since v4.0.0. Use 'Buffer.isBuffer()' instead.",
542644
],
543645
},
544646
{
545647
code: "require('util').isDate;",
648+
options: [{ version: "4.0.0" }],
546649
env: { node: true },
547650
errors: ["'util.isDate' was deprecated since v4.0.0."],
548651
},
549652
{
550653
code: "require('util').isError;",
654+
options: [{ version: "4.0.0" }],
551655
env: { node: true },
552656
errors: ["'util.isError' was deprecated since v4.0.0."],
553657
},
554658
{
555659
code: "require('util').isFunction;",
660+
options: [{ version: "4.0.0" }],
556661
env: { node: true },
557662
errors: ["'util.isFunction' was deprecated since v4.0.0."],
558663
},
559664
{
560665
code: "require('util').isNull;",
666+
options: [{ version: "4.0.0" }],
561667
env: { node: true },
562668
errors: ["'util.isNull' was deprecated since v4.0.0."],
563669
},
564670
{
565671
code: "require('util').isNullOrUndefined;",
672+
options: [{ version: "4.0.0" }],
566673
env: { node: true },
567674
errors: ["'util.isNullOrUndefined' was deprecated since v4.0.0."],
568675
},
569676
{
570677
code: "require('util').isNumber;",
678+
options: [{ version: "4.0.0" }],
571679
env: { node: true },
572680
errors: ["'util.isNumber' was deprecated since v4.0.0."],
573681
},
574682
{
575683
code: "require('util').isObject;",
684+
options: [{ version: "4.0.0" }],
576685
env: { node: true },
577686
errors: ["'util.isObject' was deprecated since v4.0.0."],
578687
},
579688
{
580689
code: "require('util').isPrimitive;",
690+
options: [{ version: "4.0.0" }],
581691
env: { node: true },
582692
errors: ["'util.isPrimitive' was deprecated since v4.0.0."],
583693
},
584694
{
585695
code: "require('util').isRegExp;",
696+
options: [{ version: "4.0.0" }],
586697
env: { node: true },
587698
errors: ["'util.isRegExp' was deprecated since v4.0.0."],
588699
},
589700
{
590701
code: "require('util').isString;",
702+
options: [{ version: "4.0.0" }],
591703
env: { node: true },
592704
errors: ["'util.isString' was deprecated since v4.0.0."],
593705
},
594706
{
595707
code: "require('util').isSymbol;",
708+
options: [{ version: "4.0.0" }],
596709
env: { node: true },
597710
errors: ["'util.isSymbol' was deprecated since v4.0.0."],
598711
},
599712
{
600713
code: "require('util').isUndefined;",
714+
options: [{ version: "4.0.0" }],
601715
env: { node: true },
602716
errors: ["'util.isUndefined' was deprecated since v4.0.0."],
603717
},
604718
{
605719
code: "require('util').log;",
720+
options: [{ version: "6.0.0" }],
606721
env: { node: true },
607722
errors: [
608723
"'util.log' was deprecated since v6.0.0. Use a third party module instead.",
609724
],
610725
},
611726
{
612727
code: "require('util').print;",
728+
options: [{ version: "0.12.0" }],
613729
env: { node: true },
614730
errors: [
615731
"'util.print' was deprecated since v0.12.0. Use 'console.log()' instead.",
616732
],
617733
},
618734
{
619735
code: "require('util').pump;",
736+
options: [{ version: "0.10.0" }],
620737
env: { node: true },
621738
errors: [
622739
"'util.pump' was deprecated since v0.10.0. Use 'stream.Readable#pipe()' instead.",
623740
],
624741
},
625742
{
626743
code: "require('util').puts;",
744+
options: [{ version: "0.12.0" }],
627745
env: { node: true },
628746
errors: [
629747
"'util.puts' was deprecated since v0.12.0. Use 'console.log()' instead.",
630748
],
631749
},
632750
{
633751
code: "require('util')._extend;",
752+
options: [{ version: "6.0.0" }],
634753
env: { node: true },
635754
errors: [
636755
"'util._extend' was deprecated since v6.0.0. Use 'Object.assign()' instead.",
637756
],
638757
},
639758
{
640759
code: "require('vm').runInDebugContext;",
760+
options: [{ version: "8.0.0" }],
641761
env: { node: true },
642762
errors: ["'vm.runInDebugContext' was deprecated since v8.0.0."],
643763
},
644764

645765
// ES2015 Modules
646766
{
647767
code: "import b from 'buffer'; new b.Buffer()",
768+
options: [{ version: "6.0.0" }],
648769
parserOptions: { sourceType: "module" },
649770
env: { es6: true },
650771
errors: [
@@ -653,6 +774,7 @@ ruleTester.run("no-deprecated-api", rule, {
653774
},
654775
{
655776
code: "import * as b from 'buffer'; new b.Buffer()",
777+
options: [{ version: "6.0.0" }],
656778
parserOptions: { sourceType: "module" },
657779
env: { es6: true },
658780
errors: [
@@ -661,6 +783,7 @@ ruleTester.run("no-deprecated-api", rule, {
661783
},
662784
{
663785
code: "import * as b from 'buffer'; new b.default.Buffer()",
786+
options: [{ version: "6.0.0" }],
664787
parserOptions: { sourceType: "module" },
665788
env: { es6: true },
666789
errors: [
@@ -669,6 +792,7 @@ ruleTester.run("no-deprecated-api", rule, {
669792
},
670793
{
671794
code: "import {Buffer as b} from 'buffer'; new b()",
795+
options: [{ version: "6.0.0" }],
672796
parserOptions: { sourceType: "module" },
673797
env: { es6: true },
674798
errors: [
@@ -677,6 +801,7 @@ ruleTester.run("no-deprecated-api", rule, {
677801
},
678802
{
679803
code: "import b from 'buffer'; b.SlowBuffer",
804+
options: [{ version: "6.0.0" }],
680805
parserOptions: { sourceType: "module" },
681806
env: { es6: true },
682807
errors: [
@@ -685,6 +810,7 @@ ruleTester.run("no-deprecated-api", rule, {
685810
},
686811
{
687812
code: "import * as b from 'buffer'; b.SlowBuffer",
813+
options: [{ version: "6.0.0" }],
688814
parserOptions: { sourceType: "module" },
689815
env: { es6: true },
690816
errors: [
@@ -693,6 +819,7 @@ ruleTester.run("no-deprecated-api", rule, {
693819
},
694820
{
695821
code: "import * as b from 'buffer'; b.default.SlowBuffer",
822+
options: [{ version: "6.0.0" }],
696823
parserOptions: { sourceType: "module" },
697824
env: { es6: true },
698825
errors: [
@@ -701,6 +828,7 @@ ruleTester.run("no-deprecated-api", rule, {
701828
},
702829
{
703830
code: "import {SlowBuffer as b} from 'buffer';",
831+
options: [{ version: "6.0.0" }],
704832
parserOptions: { sourceType: "module" },
705833
env: { es6: true },
706834
errors: [
@@ -709,6 +837,7 @@ ruleTester.run("no-deprecated-api", rule, {
709837
},
710838
{
711839
code: "import domain from 'domain';",
840+
options: [{ version: "4.0.0" }],
712841
parserOptions: { sourceType: "module" },
713842
env: { es6: true },
714843
errors: ["'domain' module was deprecated since v4.0.0."],
@@ -721,6 +850,7 @@ ruleTester.run("no-deprecated-api", rule, {
721850
//
722851
ignoreModuleItems: ["buffer.Buffer()"],
723852
ignoreGlobalItems: ["Buffer()", "new Buffer()"],
853+
version: "6.0.0",
724854
},
725855
],
726856
env: { node: true },
@@ -735,6 +865,7 @@ ruleTester.run("no-deprecated-api", rule, {
735865
//
736866
ignoreModuleItems: ["new buffer.Buffer()"],
737867
ignoreGlobalItems: ["Buffer()", "new Buffer()"],
868+
version: "6.0.0",
738869
},
739870
],
740871
env: { node: true },
@@ -748,39 +879,45 @@ ruleTester.run("no-deprecated-api", rule, {
748879
//----------------------------------------------------------------------
749880
{
750881
code: "new Buffer;",
882+
options: [{ version: "6.0.0" }],
751883
env: { node: true },
752884
errors: [
753885
"'new Buffer()' was deprecated since v6.0.0. Use 'Buffer.alloc()' or 'Buffer.from()' instead.",
754886
],
755887
},
756888
{
757889
code: "Buffer();",
890+
options: [{ version: "6.0.0" }],
758891
env: { node: true },
759892
errors: [
760893
"'Buffer()' was deprecated since v6.0.0. Use 'Buffer.alloc()' or 'Buffer.from()' instead.",
761894
],
762895
},
763896
{
764897
code: "GLOBAL; /*globals GLOBAL*/",
898+
options: [{ version: "6.0.0" }],
765899
env: { node: true },
766900
errors: [
767901
"'GLOBAL' was deprecated since v6.0.0. Use 'global' instead.",
768902
],
769903
},
770904
{
771905
code: "Intl.v8BreakIterator;",
906+
options: [{ version: "7.0.0" }],
772907
env: { node: true },
773908
errors: ["'Intl.v8BreakIterator' was deprecated since v7.0.0."],
774909
},
775910
{
776911
code: "require.extensions;",
912+
options: [{ version: "0.12.0" }],
777913
env: { node: true },
778914
errors: [
779915
"'require.extensions' was deprecated since v0.12.0. Use compiling them ahead of time instead.",
780916
],
781917
},
782918
{
783919
code: "root;",
920+
options: [{ version: "6.0.0" }],
784921
globals: { root: false },
785922
env: { node: true },
786923
errors: [
@@ -789,27 +926,31 @@ ruleTester.run("no-deprecated-api", rule, {
789926
},
790927
{
791928
code: "process.EventEmitter;",
929+
options: [{ version: "0.6.0" }],
792930
env: { node: true },
793931
errors: [
794932
"'process.EventEmitter' was deprecated since v0.6.0. Use 'require(\"events\")' instead.",
795933
],
796934
},
797935
{
798936
code: "process.env.NODE_REPL_HISTORY_FILE;",
937+
options: [{ version: "4.0.0" }],
799938
env: { node: true },
800939
errors: [
801940
"'process.env.NODE_REPL_HISTORY_FILE' was deprecated since v4.0.0. Use 'NODE_REPL_HISTORY' instead.",
802941
],
803942
},
804943
{
805944
code: "let {env: {NODE_REPL_HISTORY_FILE}} = process;",
945+
options: [{ version: "4.0.0" }],
806946
env: { node: true, es6: true },
807947
errors: [
808948
"'process.env.NODE_REPL_HISTORY_FILE' was deprecated since v4.0.0. Use 'NODE_REPL_HISTORY' instead.",
809949
],
810950
},
811951
{
812952
code: "import domain from 'domain';",
953+
options: [{ version: "4.0.0" }],
813954
parserOptions: { sourceType: "module" },
814955
errors: ["'domain' module was deprecated since v4.0.0."],
815956
},
@@ -824,6 +965,7 @@ ruleTester.run("no-deprecated-api", rule, {
824965
"new buffer.Buffer()",
825966
],
826967
ignoreGlobalItems: ["Buffer()"],
968+
version: "6.0.0",
827969
},
828970
],
829971
env: { node: true },
@@ -841,6 +983,7 @@ ruleTester.run("no-deprecated-api", rule, {
841983
"new buffer.Buffer()",
842984
],
843985
ignoreGlobalItems: ["new Buffer()"],
986+
version: "6.0.0",
844987
},
845988
],
846989
env: { node: true },

0 commit comments

Comments
 (0)
Please sign in to comment.