1234567891011121314151617181920212223242526272829303132333435363738394041 |
- module.exports = (enhancementsOnly, babelConfig) => {
- const {extensions: full = []} = babelConfig || {};
- // Combine all extensions possible for testing. Remove duplicate extensions.
- const duplicates = [];
- const seen = new Set();
- for (const ext of [...enhancementsOnly, ...full]) {
- if (seen.has(ext)) {
- duplicates.push(ext);
- } else {
- seen.add(ext);
- }
- }
- // Decide if and where to add the default `js` extension. Keep in mind it's not
- // added if extensions have been explicitly given.
- if (!seen.has('js')) {
- if (babelConfig && full.length === 0) {
- seen.add('js');
- full.push('js');
- }
- if (!babelConfig && enhancementsOnly.length === 0) {
- seen.add('js');
- enhancementsOnly.push('js');
- }
- } else if (babelConfig && full.length === 0) {
- // If Babel is not disabled, and has the default extensions (or, explicitly,
- // no configured extensions), thes the `js` extension must have come from
- // the `enhancementsOnly` value. That's not allowed since it'd be a
- // roundabout way of disabling Babel.
- throw new Error(`Cannot specify generic 'js' extension without disabling AVA's Babel usage.`);
- }
- if (duplicates.length > 0) {
- throw new Error(`Unexpected duplicate extensions in options: '${duplicates.join('\', \'')}'.`);
- }
- const all = [...seen];
- return {all, enhancementsOnly, full};
- };
|