@@ -34,6 +34,14 @@ const createRequire = Module.createRequire
34
34
return mod . exports ;
35
35
} ;
36
36
37
+ /** @type {(resolver: object) => resolver is import('./resolve').Resolver } */
38
+ function isResolverValid ( resolver ) {
39
+ if ( 'interfaceVersion' in resolver && resolver . interfaceVersion === 2 ) {
40
+ return 'resolve' in resolver && ! ! resolver . resolve && typeof resolver . resolve === 'function' ;
41
+ }
42
+ return 'resolveImport' in resolver && ! ! resolver . resolveImport && typeof resolver . resolveImport === 'function' ;
43
+ }
44
+
37
45
/** @type {<T extends string>(target: T, sourceFile?: string | null | undefined) => undefined | ReturnType<typeof require> } */
38
46
function tryRequire ( target , sourceFile ) {
39
47
let resolved ;
@@ -57,6 +65,56 @@ function tryRequire(target, sourceFile) {
57
65
return require ( resolved ) ;
58
66
}
59
67
68
+ /** @type {<T extends Map<string, unknown>>(resolvers: string[] | string | { [k: string]: string }, map: T) => T } */
69
+ function resolverReducer ( resolvers , map ) {
70
+ if ( Array . isArray ( resolvers ) ) {
71
+ resolvers . forEach ( ( r ) => resolverReducer ( r , map ) ) ;
72
+ return map ;
73
+ }
74
+
75
+ if ( typeof resolvers === 'string' ) {
76
+ map . set ( resolvers , null ) ;
77
+ return map ;
78
+ }
79
+
80
+ if ( typeof resolvers === 'object' ) {
81
+ for ( const key in resolvers ) {
82
+ map . set ( key , resolvers [ key ] ) ;
83
+ }
84
+ return map ;
85
+ }
86
+
87
+ const err = new Error ( 'invalid resolver config' ) ;
88
+ err . name = ERROR_NAME ;
89
+ throw err ;
90
+ }
91
+
92
+ /** @type {(sourceFile: string) => string } */
93
+ function getBaseDir ( sourceFile ) {
94
+ return pkgDir ( sourceFile ) || process . cwd ( ) ;
95
+ }
96
+
97
+ /** @type {(name: string, sourceFile: string) => import('./resolve').Resolver } */
98
+ function requireResolver ( name , sourceFile ) {
99
+ // Try to resolve package with conventional name
100
+ const resolver = tryRequire ( `eslint-import-resolver-${ name } ` , sourceFile )
101
+ || tryRequire ( name , sourceFile )
102
+ || tryRequire ( path . resolve ( getBaseDir ( sourceFile ) , name ) ) ;
103
+
104
+ if ( ! resolver ) {
105
+ const err = new Error ( `unable to load resolver "${ name } ".` ) ;
106
+ err . name = ERROR_NAME ;
107
+ throw err ;
108
+ }
109
+ if ( ! isResolverValid ( resolver ) ) {
110
+ const err = new Error ( `${ name } with invalid interface loaded as resolver` ) ;
111
+ err . name = ERROR_NAME ;
112
+ throw err ;
113
+ }
114
+
115
+ return resolver ;
116
+ }
117
+
60
118
// https://stackoverflow.com/a/27382838
61
119
/** @type {import('./resolve').fileExistsWithCaseSync } */
62
120
exports . fileExistsWithCaseSync = function fileExistsWithCaseSync ( filepath , cacheSettings , strict ) {
@@ -159,64 +217,6 @@ function relative(modulePath, sourceFile, settings) {
159
217
}
160
218
exports . relative = relative ;
161
219
162
- /** @type {<T extends Map<string, unknown>>(resolvers: string[] | string | { [k: string]: string }, map: T) => T } */
163
- function resolverReducer ( resolvers , map ) {
164
- if ( Array . isArray ( resolvers ) ) {
165
- resolvers . forEach ( ( r ) => resolverReducer ( r , map ) ) ;
166
- return map ;
167
- }
168
-
169
- if ( typeof resolvers === 'string' ) {
170
- map . set ( resolvers , null ) ;
171
- return map ;
172
- }
173
-
174
- if ( typeof resolvers === 'object' ) {
175
- for ( const key in resolvers ) {
176
- map . set ( key , resolvers [ key ] ) ;
177
- }
178
- return map ;
179
- }
180
-
181
- const err = new Error ( 'invalid resolver config' ) ;
182
- err . name = ERROR_NAME ;
183
- throw err ;
184
- }
185
-
186
- /** @type {(sourceFile: string) => string } */
187
- function getBaseDir ( sourceFile ) {
188
- return pkgDir ( sourceFile ) || process . cwd ( ) ;
189
- }
190
-
191
- /** @type {(name: string, sourceFile: string) => import('./resolve').Resolver } */
192
- function requireResolver ( name , sourceFile ) {
193
- // Try to resolve package with conventional name
194
- const resolver = tryRequire ( `eslint-import-resolver-${ name } ` , sourceFile )
195
- || tryRequire ( name , sourceFile )
196
- || tryRequire ( path . resolve ( getBaseDir ( sourceFile ) , name ) ) ;
197
-
198
- if ( ! resolver ) {
199
- const err = new Error ( `unable to load resolver "${ name } ".` ) ;
200
- err . name = ERROR_NAME ;
201
- throw err ;
202
- }
203
- if ( ! isResolverValid ( resolver ) ) {
204
- const err = new Error ( `${ name } with invalid interface loaded as resolver` ) ;
205
- err . name = ERROR_NAME ;
206
- throw err ;
207
- }
208
-
209
- return resolver ;
210
- }
211
-
212
- /** @type {(resolver: object) => resolver is import('./resolve').Resolver } */
213
- function isResolverValid ( resolver ) {
214
- if ( 'interfaceVersion' in resolver && resolver . interfaceVersion === 2 ) {
215
- return 'resolve' in resolver && ! ! resolver . resolve && typeof resolver . resolve === 'function' ;
216
- }
217
- return 'resolveImport' in resolver && ! ! resolver . resolveImport && typeof resolver . resolveImport === 'function' ;
218
- }
219
-
220
220
/** @type {Set<import('eslint').Rule.RuleContext> } */
221
221
const erroredContexts = new Set ( ) ;
222
222
0 commit comments