Tim van der Lippe | fdbd42e | 2020-04-07 15:14:36 +0100 | [diff] [blame] | 1 | 'use strict' |
| 2 | exports.__esModule = true |
| 3 | |
| 4 | const extname = require('path').extname |
| 5 | |
| 6 | const log = require('debug')('eslint-plugin-import:utils:ignore') |
| 7 | |
| 8 | // one-shot memoized |
| 9 | let cachedSet, lastSettings |
| 10 | function validExtensions(context) { |
| 11 | if (cachedSet && context.settings === lastSettings) { |
| 12 | return cachedSet |
| 13 | } |
| 14 | |
| 15 | lastSettings = context.settings |
| 16 | cachedSet = makeValidExtensionSet(context.settings) |
| 17 | return cachedSet |
| 18 | } |
| 19 | |
| 20 | function makeValidExtensionSet(settings) { |
| 21 | // start with explicit JS-parsed extensions |
| 22 | const exts = new Set(settings['import/extensions'] || [ '.js' ]) |
| 23 | |
| 24 | // all alternate parser extensions are also valid |
| 25 | if ('import/parsers' in settings) { |
| 26 | for (let parser in settings['import/parsers']) { |
| 27 | const parserSettings = settings['import/parsers'][parser] |
| 28 | if (!Array.isArray(parserSettings)) { |
| 29 | throw new TypeError('"settings" for ' + parser + ' must be an array') |
| 30 | } |
| 31 | parserSettings.forEach(ext => exts.add(ext)) |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | return exts |
| 36 | } |
| 37 | exports.getFileExtensions = makeValidExtensionSet |
| 38 | |
| 39 | exports.default = function ignore(path, context) { |
| 40 | // check extension whitelist first (cheap) |
| 41 | if (!hasValidExtension(path, context)) return true |
| 42 | |
| 43 | if (!('import/ignore' in context.settings)) return false |
| 44 | const ignoreStrings = context.settings['import/ignore'] |
| 45 | |
| 46 | for (let i = 0; i < ignoreStrings.length; i++) { |
| 47 | const regex = new RegExp(ignoreStrings[i]) |
| 48 | if (regex.test(path)) { |
| 49 | log(`ignoring ${path}, matched pattern /${ignoreStrings[i]}/`) |
| 50 | return true |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | return false |
| 55 | } |
| 56 | |
| 57 | function hasValidExtension(path, context) { |
| 58 | return validExtensions(context).has(extname(path)) |
| 59 | } |
| 60 | exports.hasValidExtension = hasValidExtension |