Replace minimatch with the faster alternative picomatch #1374
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Replaces minimatch with the smaller (434 KB -> 85 KB) and faster alternative picomatch.
Picomatch is also the faster alternative to micromatch and nanomatch that aren't maintained anymore. Picomatch uses the factory pattern to create Matchers to be used to match strings:
Written inline, it looks like this:
Some other things:
composeFilter
function, because every inline function, such aspredicate
,matchUnscoped
andmatchScoped
are completely rebuild every time you callcomposeFilter
. This pattern is also the reason why nestedforEach
-loops are incredibly slow, due to the constant function rebuilding.filterPattern[filterPattern.length -1]
withfilterPattern.at(-1)
which is a new prototype function that is twice as fast. You should integrate it into your project or use eslint-plugin-unicorn to fix all occurrences of it.