blob: 32bbbc6249522926d540a06208de3fb5ca3c44b5 [file] [log] [blame]
Tim van der Lippe2c891972021-07-29 16:22:50 +01001'use strict';
2exports.__esModule = true;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +01003
Tim van der Lippe2c891972021-07-29 16:22:50 +01004const extname = require('path').extname;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +01005
Tim van der Lippe2c891972021-07-29 16:22:50 +01006const log = require('debug')('eslint-plugin-import:utils:ignore');
Tim van der Lippefdbd42e2020-04-07 15:14:36 +01007
8// one-shot memoized
Tim van der Lippe2c891972021-07-29 16:22:50 +01009let cachedSet; let lastSettings;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010010function validExtensions(context) {
11 if (cachedSet && context.settings === lastSettings) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010012 return cachedSet;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010013 }
14
Tim van der Lippe2c891972021-07-29 16:22:50 +010015 lastSettings = context.settings;
16 cachedSet = makeValidExtensionSet(context.settings);
17 return cachedSet;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010018}
19
20function makeValidExtensionSet(settings) {
21 // start with explicit JS-parsed extensions
Tim van der Lippe2c891972021-07-29 16:22:50 +010022 const exts = new Set(settings['import/extensions'] || [ '.js' ]);
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010023
24 // all alternate parser extensions are also valid
25 if ('import/parsers' in settings) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010026 for (const parser in settings['import/parsers']) {
27 const parserSettings = settings['import/parsers'][parser];
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010028 if (!Array.isArray(parserSettings)) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010029 throw new TypeError('"settings" for ' + parser + ' must be an array');
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010030 }
Tim van der Lippe2c891972021-07-29 16:22:50 +010031 parserSettings.forEach(ext => exts.add(ext));
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010032 }
33 }
34
Tim van der Lippe2c891972021-07-29 16:22:50 +010035 return exts;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010036}
Tim van der Lippe2c891972021-07-29 16:22:50 +010037exports.getFileExtensions = makeValidExtensionSet;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010038
39exports.default = function ignore(path, context) {
40 // check extension whitelist first (cheap)
Tim van der Lippe2c891972021-07-29 16:22:50 +010041 if (!hasValidExtension(path, context)) return true;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010042
Tim van der Lippe2c891972021-07-29 16:22:50 +010043 if (!('import/ignore' in context.settings)) return false;
44 const ignoreStrings = context.settings['import/ignore'];
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010045
46 for (let i = 0; i < ignoreStrings.length; i++) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010047 const regex = new RegExp(ignoreStrings[i]);
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010048 if (regex.test(path)) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010049 log(`ignoring ${path}, matched pattern /${ignoreStrings[i]}/`);
50 return true;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010051 }
52 }
53
Tim van der Lippe2c891972021-07-29 16:22:50 +010054 return false;
55};
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010056
57function hasValidExtension(path, context) {
Tim van der Lippe2c891972021-07-29 16:22:50 +010058 return validExtensions(context).has(extname(path));
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010059}
Tim van der Lippe2c891972021-07-29 16:22:50 +010060exports.hasValidExtension = hasValidExtension;