partial.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const matcher_1 = require("./matcher");
  4. class PartialMatcher extends matcher_1.default {
  5. match(filepath) {
  6. const parts = filepath.split('/');
  7. const levels = parts.length;
  8. const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
  9. for (const pattern of patterns) {
  10. const section = pattern.sections[0];
  11. /**
  12. * In this case, the pattern has a globstar and we must read all directories unconditionally,
  13. * but only if the level has reached the end of the first group.
  14. *
  15. * fixtures/{a,b}/**
  16. * ^ true/false ^ always true
  17. */
  18. if (!pattern.complete && levels > section.length) {
  19. return true;
  20. }
  21. const match = parts.every((part, index) => {
  22. const segment = pattern.segments[index];
  23. if (segment.dynamic && segment.patternRe.test(part)) {
  24. return true;
  25. }
  26. if (!segment.dynamic && segment.pattern === part) {
  27. return true;
  28. }
  29. return false;
  30. });
  31. if (match) {
  32. return true;
  33. }
  34. }
  35. return false;
  36. }
  37. }
  38. exports.default = PartialMatcher;