ignore.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. "use strict"
  2. exports.__esModule = true
  3. const extname = require('path').extname
  4. const log = require('debug')('eslint-plugin-import:utils:ignore')
  5. // one-shot memoized
  6. let cachedSet, lastSettings
  7. function validExtensions(context) {
  8. if (cachedSet && context.settings === lastSettings) {
  9. return cachedSet
  10. }
  11. lastSettings = context.settings
  12. cachedSet = makeValidExtensionSet(context.settings)
  13. return cachedSet
  14. }
  15. function makeValidExtensionSet(settings) {
  16. // start with explicit JS-parsed extensions
  17. const exts = new Set(settings['import/extensions'] || [ '.js' ])
  18. // all alternate parser extensions are also valid
  19. if ('import/parsers' in settings) {
  20. for (let parser in settings['import/parsers']) {
  21. settings['import/parsers'][parser]
  22. .forEach(ext => exts.add(ext))
  23. }
  24. }
  25. return exts
  26. }
  27. exports.default = function ignore(path, context) {
  28. // check extension whitelist first (cheap)
  29. if (!hasValidExtension(path, context)) return true
  30. if (!('import/ignore' in context.settings)) return false
  31. const ignoreStrings = context.settings['import/ignore']
  32. for (let i = 0; i < ignoreStrings.length; i++) {
  33. const regex = new RegExp(ignoreStrings[i])
  34. if (regex.test(path)) {
  35. log(`ignoring ${path}, matched pattern /${ignoreStrings[i]}/`)
  36. return true
  37. }
  38. }
  39. return false
  40. }
  41. function hasValidExtension(path, context) {
  42. return validExtensions(context).has(extname(path))
  43. }
  44. exports.hasValidExtension = hasValidExtension