rrdir 10.1.1 → 10.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +17 -7
  2. package/package.json +6 -6
package/index.js CHANGED
@@ -13,8 +13,6 @@ const defaults = {
13
13
  insensitive: false,
14
14
  };
15
15
 
16
- const escRe = str => str.replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&");
17
-
18
16
  function makePath(entry, dir, encoding) {
19
17
  if (encoding === "buffer") {
20
18
  return dir === "." ? entry.name : Buffer.from([...dir, ...sepBuffer, ...entry.name]);
@@ -32,13 +30,25 @@ function build(dirent, path, stats, opts) {
32
30
  };
33
31
  }
34
32
 
33
+ export function pathGlobToRegex(glob, {flags = undefined, sep = "/"} = {flags: undefined, sep: "/"}) {
34
+ if (sep === "\\") sep = "\\\\";
35
+ return new RegExp(`${glob
36
+ .replace(/[|\\{}()[\]^$+.-]/g, "\\$&")
37
+ .replace(new RegExp(`\\*\\*${sep}\\*`, "g"), ".*")
38
+ .replace(/^\*\*/g, ".*")
39
+ .replace(new RegExp(`${sep}?\\*\\*$`, "g"), ".*")
40
+ .replace(new RegExp(`(${sep})\\*\\*(${sep})`, "g"), (_, p1, p2) => `${p1}.*${p2}`)
41
+ .replace(/([^.])\*/g, (_, p1) => `${p1}[^${sep}]*`)
42
+ .replaceAll("**", "*")
43
+ .replaceAll("?", ".")
44
+ }$`, flags);
45
+ }
46
+
35
47
  function makeMatcher(filters, flags) {
36
- const res = filters.map(f => {
37
- return new RegExp(`${escRe(f).replace(/\\\*+/g, ".*").replace(/\/\.\*/, ".*")}$`, flags);
38
- });
48
+ const regexes = filters.map(filter => pathGlobToRegex(filter, {flags, sep}));
39
49
  return str => {
40
- for (const re of res) {
41
- if (re.test(str)) return true;
50
+ for (const regex of regexes) {
51
+ if (regex.test(str)) return true;
42
52
  }
43
53
  return false;
44
54
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrdir",
3
- "version": "10.1.1",
3
+ "version": "10.1.3",
4
4
  "description": "Recursive directory reader with a delightful API",
5
5
  "author": "silverwind <me@silverwind.io>",
6
6
  "repository": "silverwind/rrdir",
@@ -15,11 +15,11 @@
15
15
  "index.js"
16
16
  ],
17
17
  "devDependencies": {
18
- "eslint": "8.29.0",
19
- "eslint-config-silverwind": "65.0.0",
20
- "updates": "13.2.4",
21
- "versions": "10.4.1",
22
- "vitest": "0.25.8"
18
+ "eslint": "8.36.0",
19
+ "eslint-config-silverwind": "65.1.3",
20
+ "updates": "13.2.9",
21
+ "versions": "10.4.2",
22
+ "vitest": "0.29.7"
23
23
  },
24
24
  "keywords": [
25
25
  "recursive readdir",