index.js 654 B

123456789101112131415161718192021222324252627282930
  1. 'use strict';
  2. const minimatch = require('minimatch');
  3. const arrayUnion = require('array-union');
  4. const arrayDiffer = require('array-differ');
  5. const arrify = require('arrify');
  6. module.exports = (list, patterns, options = {}) => {
  7. list = arrify(list);
  8. patterns = arrify(patterns);
  9. if (list.length === 0 || patterns.length === 0) {
  10. return [];
  11. }
  12. let result = [];
  13. for (const item of list) {
  14. for (let pattern of patterns) {
  15. let process = arrayUnion;
  16. if (pattern[0] === '!') {
  17. pattern = pattern.slice(1);
  18. process = arrayDiffer;
  19. }
  20. result = process(result, minimatch.match([item], pattern, options));
  21. }
  22. }
  23. return result;
  24. };