Skip to content

Commit f4008d5

Browse files
committed
Map provider protocols to 'levels'
Rather than perform typeof checks to see if the provider has a particular feature, check the 'support level' instead. This should make code using a provider easier to maintain.
1 parent 56338dc commit f4008d5

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

eslint-plugin-helper.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,20 @@ function load(projectDir, overrides) {
2222

2323
providers = [];
2424
if (Reflect.has(conf, 'babel')) {
25+
const {level, main} = providerManager.babel(projectDir);
2526
providers.push({
26-
type: 'babel',
27-
main: providerManager.babel(projectDir).main({config: conf.babel})
27+
level,
28+
main: main({config: conf.babel}),
29+
type: 'babel'
2830
});
2931
}
3032

3133
if (Reflect.has(conf, 'typescript')) {
34+
const {level, main} = providerManager.typescript(projectDir);
3235
providers.push({
33-
type: 'typescript',
34-
main: providerManager.typescript(projectDir).main({config: conf.typescript})
36+
level,
37+
main: main({config: conf.typescript}),
38+
type: 'typescript'
3539
});
3640
}
3741

lib/cli.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,11 @@ exports.run = async () => { // eslint-disable-line complexity
282282
const providers = [];
283283
if (Reflect.has(conf, 'babel')) {
284284
try {
285+
const {level, main} = providerManager.babel(projectDir);
285286
providers.push({
286-
type: 'babel',
287-
main: providerManager.babel(projectDir).main({config: conf.babel})
287+
level,
288+
main: main({config: conf.babel}),
289+
type: 'babel'
288290
});
289291
} catch (error) {
290292
exit(error.message);
@@ -293,9 +295,11 @@ exports.run = async () => { // eslint-disable-line complexity
293295

294296
if (Reflect.has(conf, 'typescript')) {
295297
try {
298+
const {level, main} = providerManager.typescript(projectDir);
296299
providers.push({
297-
type: 'typescript',
298-
main: providerManager.typescript(projectDir).main({config: conf.typescript})
300+
level,
301+
main: main({config: conf.typescript}),
302+
type: 'typescript'
299303
});
300304
} catch (error) {
301305
exit(error.message);

lib/provider-manager.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,39 @@
11
const pkg = require('../package.json');
22
const globs = require('./globs');
33

4+
const levels = {
5+
ava3: 1
6+
};
7+
8+
exports.levels = levels;
9+
10+
const levelsByProtocol = {
11+
'ava-3': levels.ava3
12+
};
13+
414
function load(providerModule, projectDir) {
515
const ava = {version: pkg.version};
616
const makeProvider = require(providerModule);
717

818
let fatal;
19+
let level;
920
const provider = makeProvider({
1021
negotiateProtocol(identifiers, {version}) {
11-
if (!identifiers.includes('ava-3')) {
22+
const [identifier] = identifiers.filter(identifier => Reflect.has(levelsByProtocol, identifier));
23+
24+
if (identifier === undefined) {
1225
fatal = new Error(`This version of AVA (${ava.version}) is not compatible with ${providerModule}@${version}`);
1326
return null;
1427
}
1528

29+
level = levelsByProtocol[identifier];
30+
1631
return {
1732
ava,
1833
async findFiles({extensions, patterns}) {
1934
return globs.findFiles({cwd: projectDir, extensions, filePatterns: patterns});
2035
},
21-
identifier: 'ava-3',
36+
identifier,
2237
normalizeGlobPatterns: globs.normalizePatterns,
2338
projectDir
2439
};
@@ -29,7 +44,7 @@ function load(providerModule, projectDir) {
2944
throw fatal;
3045
}
3146

32-
return provider;
47+
return {...provider, level};
3348
}
3449

3550
exports.babel = projectDir => load('@ava/babel', projectDir);

0 commit comments

Comments
 (0)