@@ -11,13 +11,24 @@ const processCwd = process.cwd;
11
11
const eslintVersion = semver . satisfies ( eslintPkg . version , '< 5' ) ? 'prior-v5' : 'post-v5' ;
12
12
const supportsScopedPlugins = semver . satisfies ( eslintPkg . version , '>= 5' ) ;
13
13
14
- // The strategy is simple: if called with one of our plugins, just return
15
- // the module name, as-is. This is a lie because what we return is not a
16
- // path, but it is simple, and works. Otherwise, we just call the original
17
- // `resolve` from the stock module.
18
- const mockResolve = ( plugins , relative , name ) => (
19
- plugins . includes ( name ) ? name : createRequire ( relative ) . resolve ( name )
20
- ) ;
14
+ const mockCreateRequire = ( getExport , plugins , relative ) => {
15
+ // Use the mocked require.
16
+ const moduleRequire = ( id ) => {
17
+ const targetExport = getExport ( ) ;
18
+ return module . children
19
+ . find ( ( m ) => m . exports === targetExport )
20
+ . require ( id ) ;
21
+ } ;
22
+ return Object . assign ( moduleRequire , {
23
+ // The strategy is simple: if called with one of our plugins, just return
24
+ // the module name, as-is. This is a lie because what we return is not a
25
+ // path, but it is simple, and works. Otherwise, we just call the original
26
+ // `resolve` from the stock module.
27
+ resolve : ( name ) => (
28
+ plugins . includes ( name ) ? name : createRequire ( relative ) . resolve ( name )
29
+ )
30
+ } ) ;
31
+ } ;
21
32
22
33
const getRuleFinder = proxyquire ( '../../src/lib/rule-finder' , {
23
34
eslint : {
@@ -32,16 +43,18 @@ const getRuleFinder = proxyquire('../../src/lib/rule-finder', {
32
43
}
33
44
} ,
34
45
module : {
35
- createRequire : ( relative ) => Object . assign ( ( id ) => require ( id ) , {
36
- resolve : mockResolve . bind ( null , [
46
+ createRequire : ( relative ) => mockCreateRequire (
47
+ ( ) => getRuleFinder ,
48
+ [
37
49
'eslint-plugin-plugin' ,
38
50
'eslint-plugin-no-rules' ,
39
51
'@scope/eslint-plugin-scoped-plugin' ,
40
52
'@scope/eslint-plugin' ,
41
53
'@scope-with-dash/eslint-plugin-scoped-with-dash-plugin' ,
42
54
'@scope-with-dash/eslint-plugin'
43
- ] , relative )
44
- } ) ,
55
+ ] ,
56
+ relative
57
+ ) ,
45
58
'@global' : true
46
59
} ,
47
60
'eslint-plugin-plugin' : {
@@ -127,11 +140,13 @@ const getRuleFinderForDedupeTests = proxyquire('../../src/lib/rule-finder', {
127
140
}
128
141
} ,
129
142
module : {
130
- createRequire : ( relative ) => Object . assign ( ( id ) => require ( id ) , {
131
- resolve : mockResolve . bind ( null , [
143
+ createRequire : ( relative ) => mockCreateRequire (
144
+ ( ) => getRuleFinderForDedupeTests ,
145
+ [
132
146
'eslint-plugin-plugin'
133
- ] , relative )
134
- } ) ,
147
+ ] ,
148
+ relative
149
+ ) ,
135
150
'@global' : true
136
151
} ,
137
152
'eslint-plugin-plugin' : {
0 commit comments