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