Comments (3)
Okay, I knew this would occur sooner or later.
We have two options here:
- We change the API to treat multi-filters as AND conditional (not as OR).
- We add a second parameter to the
.filter
method that defines whether it is AND or OR.
Which one makes the most sense? Should filters be, by default, AND conditioned?
from fdir.
I am not excited about breaking the existing API, but I think it's the right thing to do. The reason is that chained .filter
calls in vanilla Javascript act in a cascading AND manner. You take the list, filter it, return the new list - then take that new list, filter it, return it - etc.
Besides this being what I would consider the expected behavior, there's also a lot less that can go wrong with this method. With the OR default, you can accidentally select more than you wanted - potentially a LOT more, causing speed and resource issues with your program. With the AND method, you might accidentally select too little, but that would have much less of a negative impact on your program.
I did work around the issue by just grabbing all the files and applying the cascading filters to the resulting array. The workaround for the current method would be to use pipes in a regex match. In terms of workarounds, leaving it as-is is superior. In that case, if you switch to AND by default, I suggest you add a flag for enabling OR mode.
EDIT: I forgot to add - thank you for your quick response and for this excellent piece of software!
from fdir.
I am not excited about breaking the existing API, but I think it's the right thing to do. The reason is that chained .filter calls in vanilla Javascript act in a cascading AND manner. You take the list, filter it, return the new list - then take that new list, filter it, return it - etc.
Yes but the filter of fdir
works a little bit differently; it collects all the filters and then applies them all via filters.some
. Since, there's no cascading, does it still make sense?
This line handles most of it:
if (filters.some((f) => f(filename))) files.push(filename);
To change it, all that has to be done is to swap .some
with .every
, I suppose.
In effect, this is just a convenient wrapper. You could easily just use a single .filter
and put all the conditions in one (it might even be slightly more performant).
In terms of workarounds, leaving it as-is is superior. In that case, if you switch to AND by default, I suggest you add a flag for enabling OR mode.
I suppose we can add an option to toggle OR/AND mode.
I forgot to add - thank you for your quick response and for this excellent piece of software!
No problem, glad to have helped.
from fdir.
Related Issues (20)
- Export type `Options` from `crawlWithOptions(dir, Options)` HOT 1
- Make a note about the `sync` api being much slower
- Remove callback API in next major HOT 1
- v7.0 Plan HOT 7
- Need to list path to symlink instead of resolved path HOT 2
- Limit files option HOT 1
- Need help debugging an issue?? with fdir HOT 4
- What's the correct way to use globbing? HOT 2
- Crawl with options group interface no longer correct in v5.2.0 (v5.1.0 was the same) HOT 1
- Ideas for mocking HOT 1
- [Feature] glob/crawl by symlink path, not real path HOT 7
- Sorting based on date, name, size etc
- Issue with SharePoint project accessible over the network HOT 2
- Invalid reference of TypeScript types HOT 2
- Feature request: pass picomatch to the builder HOT 3
- Avoiding double backslash
- Corner case when globbing current directory returns zero results HOT 1
- Problem with double Backslash on Windows
- Bug: Module '"picomatch"' has no exported member 'PicomatchOptions'. HOT 1
- Add `fs.readdir` with `{ recursive: true }` to benchmarks HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fdir.