utils.js 825 B

123456789101112131415161718192021222324252627282930313233
  1. import isRegExp from 'lodash/isRegExp';
  2. export function createAssetsFilter(excludePatterns) {
  3. const excludeFunctions = (
  4. Array.isArray(excludePatterns) ? excludePatterns : [excludePatterns]
  5. )
  6. .filter(Boolean)
  7. .map(pattern => {
  8. if (typeof pattern === 'string') {
  9. pattern = new RegExp(pattern, 'u');
  10. }
  11. if (isRegExp(pattern)) {
  12. return asset => pattern.test(asset);
  13. }
  14. if (typeof pattern !== 'function') {
  15. throw new TypeError(
  16. `Pattern should be either string, RegExp or a function, but "${JSON.parse(
  17. pattern,
  18. {depth: 0}
  19. )}" got.`
  20. );
  21. }
  22. return pattern;
  23. });
  24. if (excludeFunctions.length) {
  25. return asset => excludeFunctions.every(fn => fn(asset) !== true);
  26. }
  27. return () => true;
  28. }