1- import { parsers , test } from '../utils' ;
1+ import { parsers , test , testVersion } from '../utils' ;
22
33import { RuleTester } from 'eslint' ;
4+ import flatMap from 'array.prototype.flatmap' ;
45
56const ruleTester = new RuleTester ( ) ;
67const rule = require ( 'rules/no-dynamic-require' ) ;
78
9+ const espree = require . resolve ( 'espree' ) ;
10+
811const error = {
912 message : 'Calls to require() should use string literals' ,
1013} ;
@@ -28,56 +31,93 @@ ruleTester.run('no-dynamic-require', rule, {
2831 test ( { code : 'var foo = require("@scope/foo")' } ) ,
2932
3033 //dynamic import
31- test ( {
32- code : 'import("foo")' ,
33- parser : parsers . BABEL_OLD ,
34- options : [ { esmodule : true } ] ,
35- } ) ,
36- test ( {
37- code : 'import(`foo`)' ,
38- parser : parsers . BABEL_OLD ,
39- options : [ { esmodule : true } ] ,
40- } ) ,
41- test ( {
42- code : 'import("./foo")' ,
43- parser : parsers . BABEL_OLD ,
44- options : [ { esmodule : true } ] ,
45- } ) ,
46- test ( {
47- code : 'import("@scope/foo")' ,
48- parser : parsers . BABEL_OLD ,
49- options : [ { esmodule : true } ] ,
50- } ) ,
51- test ( {
52- code : 'var foo = import("foo")' ,
53- parser : parsers . BABEL_OLD ,
54- options : [ { esmodule : true } ] ,
55- } ) ,
56- test ( {
57- code : 'var foo = import(`foo`)' ,
58- parser : parsers . BABEL_OLD ,
59- options : [ { esmodule : true } ] ,
60- } ) ,
61- test ( {
62- code : 'var foo = import("./foo")' ,
63- parser : parsers . BABEL_OLD ,
64- options : [ { esmodule : true } ] ,
65- } ) ,
66- test ( {
67- code : 'var foo = import("@scope/foo")' ,
68- parser : parsers . BABEL_OLD ,
69- options : [ { esmodule : true } ] ,
70- } ) ,
71- test ( {
72- code : 'import("../" + name)' ,
73- errors : [ dynamicImportError ] ,
74- parser : parsers . BABEL_OLD ,
75- options : [ { esmodule : false } ] ,
76- } ) ,
77- test ( {
78- code : 'import(`../${name}`)' ,
79- errors : [ dynamicImportError ] ,
80- parser : parsers . BABEL_OLD ,
34+ ...flatMap ( [ espree , parsers . BABEL_OLD ] , ( parser ) => {
35+ const _test =
36+ parser === espree
37+ ? ( testObj ) => testVersion ( '>= 6.2.0' , ( ) => testObj )
38+ : ( testObj ) => test ( testObj ) ;
39+ return [
40+ _test ( {
41+ code : 'import("foo")' ,
42+ options : [ { esmodule : true } ] ,
43+ parser,
44+ parserOptions : {
45+ ecmaVersion : 2020 ,
46+ } ,
47+ } ) ,
48+ _test ( {
49+ code : 'import(`foo`)' ,
50+ options : [ { esmodule : true } ] ,
51+ parser,
52+ parserOptions : {
53+ ecmaVersion : 2020 ,
54+ } ,
55+ } ) ,
56+ _test ( {
57+ code : 'import("./foo")' ,
58+ options : [ { esmodule : true } ] ,
59+ parser,
60+ parserOptions : {
61+ ecmaVersion : 2020 ,
62+ } ,
63+ } ) ,
64+ _test ( {
65+ code : 'import("@scope/foo")' ,
66+ options : [ { esmodule : true } ] ,
67+ parser,
68+ parserOptions : {
69+ ecmaVersion : 2020 ,
70+ } ,
71+ } ) ,
72+ _test ( {
73+ code : 'var foo = import("foo")' ,
74+ options : [ { esmodule : true } ] ,
75+ parser,
76+ parserOptions : {
77+ ecmaVersion : 2020 ,
78+ } ,
79+ } ) ,
80+ _test ( {
81+ code : 'var foo = import(`foo`)' ,
82+ options : [ { esmodule : true } ] ,
83+ parser,
84+ parserOptions : {
85+ ecmaVersion : 2020 ,
86+ } ,
87+ } ) ,
88+ _test ( {
89+ code : 'var foo = import("./foo")' ,
90+ options : [ { esmodule : true } ] ,
91+ parser,
92+ parserOptions : {
93+ ecmaVersion : 2020 ,
94+ } ,
95+ } ) ,
96+ _test ( {
97+ code : 'var foo = import("@scope/foo")' ,
98+ options : [ { esmodule : true } ] ,
99+ parser,
100+ parserOptions : {
101+ ecmaVersion : 2020 ,
102+ } ,
103+ } ) ,
104+ _test ( {
105+ code : 'import("../" + name)' ,
106+ errors : [ dynamicImportError ] ,
107+ parser,
108+ parserOptions : {
109+ ecmaVersion : 2020 ,
110+ } ,
111+ } ) ,
112+ _test ( {
113+ code : 'import(`../${name}`)' ,
114+ errors : [ dynamicImportError ] ,
115+ parser,
116+ parserOptions : {
117+ ecmaVersion : 2020 ,
118+ } ,
119+ } ) ,
120+ ] ;
81121 } ) ,
82122 ] ,
83123 invalid : [
@@ -104,29 +144,49 @@ ruleTester.run('no-dynamic-require', rule, {
104144 } ) ,
105145
106146 // dynamic import
107- test ( {
108- code : 'import("../" + name)' ,
109- errors : [ dynamicImportError ] ,
110- parser : parsers . BABEL_OLD ,
111- options : [ { esmodule : true } ] ,
112- } ) ,
113- test ( {
114- code : 'import(`../${name}`)' ,
115- errors : [ dynamicImportError ] ,
116- parser : parsers . BABEL_OLD ,
117- options : [ { esmodule : true } ] ,
118- } ) ,
119- test ( {
120- code : 'import(name)' ,
121- errors : [ dynamicImportError ] ,
122- parser : parsers . BABEL_OLD ,
123- options : [ { esmodule : true } ] ,
124- } ) ,
125- test ( {
126- code : 'import(name())' ,
127- errors : [ dynamicImportError ] ,
128- parser : parsers . BABEL_OLD ,
129- options : [ { esmodule : true } ] ,
147+ ...flatMap ( [ espree , parsers . BABEL_OLD ] , ( parser ) => {
148+ const _test =
149+ parser === espree
150+ ? ( testObj ) => testVersion ( '>= 6.2.0' , ( ) => testObj )
151+ : ( testObj ) => test ( testObj ) ;
152+ return [
153+ _test ( {
154+ code : 'import("../" + name)' ,
155+ errors : [ dynamicImportError ] ,
156+ options : [ { esmodule : true } ] ,
157+ parser,
158+ parserOptions : {
159+ ecmaVersion : 2020 ,
160+ } ,
161+ } ) ,
162+ _test ( {
163+ code : 'import(`../${name}`)' ,
164+ errors : [ dynamicImportError ] ,
165+ options : [ { esmodule : true } ] ,
166+ parser,
167+ parserOptions : {
168+ ecmaVersion : 2020 ,
169+ } ,
170+ } ) ,
171+ _test ( {
172+ code : 'import(name)' ,
173+ errors : [ dynamicImportError ] ,
174+ options : [ { esmodule : true } ] ,
175+ parser,
176+ parserOptions : {
177+ ecmaVersion : 2020 ,
178+ } ,
179+ } ) ,
180+ _test ( {
181+ code : 'import(name())' ,
182+ errors : [ dynamicImportError ] ,
183+ options : [ { esmodule : true } ] ,
184+ parser,
185+ parserOptions : {
186+ ecmaVersion : 2020 ,
187+ } ,
188+ } ) ,
189+ ] ;
130190 } ) ,
131191 test ( {
132192 code : 'require(`foo${x}`)' ,
0 commit comments