You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.8 KiB
50 lines
1.8 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
const utils = require("../../utils"); |
|
class Matcher { |
|
constructor(_patterns, _settings, _micromatchOptions) { |
|
this._patterns = _patterns; |
|
this._settings = _settings; |
|
this._micromatchOptions = _micromatchOptions; |
|
this._storage = []; |
|
this._fillStorage(); |
|
} |
|
_fillStorage() { |
|
/** |
|
* The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level). |
|
* So, before expand patterns with brace expansion into separated patterns. |
|
*/ |
|
const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns); |
|
for (const pattern of patterns) { |
|
const segments = this._getPatternSegments(pattern); |
|
const sections = this._splitSegmentsIntoSections(segments); |
|
this._storage.push({ |
|
complete: sections.length <= 1, |
|
pattern, |
|
segments, |
|
sections |
|
}); |
|
} |
|
} |
|
_getPatternSegments(pattern) { |
|
const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions); |
|
return parts.map((part) => { |
|
const dynamic = utils.pattern.isDynamicPattern(part, this._settings); |
|
if (!dynamic) { |
|
return { |
|
dynamic: false, |
|
pattern: part |
|
}; |
|
} |
|
return { |
|
dynamic: true, |
|
pattern: part, |
|
patternRe: utils.pattern.makeRe(part, this._micromatchOptions) |
|
}; |
|
}); |
|
} |
|
_splitSegmentsIntoSections(segments) { |
|
return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern)); |
|
} |
|
} |
|
exports.default = Matcher;
|
|
|