Title: Enhance `path.matchesGlob` to support exclusion patterns and options (parity with `fs.glob`) · Issue #59015 · nodejs/node · GitHub
Open Graph Title: Enhance `path.matchesGlob` to support exclusion patterns and options (parity with `fs.glob`) · Issue #59015 · nodejs/node
X Title: Enhance `path.matchesGlob` to support exclusion patterns and options (parity with `fs.glob`) · Issue #59015 · nodejs/node
Description: What is the problem this feature will solve? Currently, the fs.glob function in Node.js allows specifying advanced options such as exclude patterns, which not only exclude the specified path but also all its descendants from matching res...
Open Graph Description: What is the problem this feature will solve? Currently, the fs.glob function in Node.js allows specifying advanced options such as exclude patterns, which not only exclude the specified path but al...
X Description: What is the problem this feature will solve? Currently, the fs.glob function in Node.js allows specifying advanced options such as exclude patterns, which not only exclude the specified path but al...
Opengraph URL: https://github.com/nodejs/node/issues/59015
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Enhance `path.matchesGlob` to support exclusion patterns and options (parity with `fs.glob`)","articleBody":"\n\n### What is the problem this feature will solve?\n------------------------------------------------\nCurrently, the `fs.glob` function in Node.js allows specifying advanced options such as `exclude` patterns, which not only exclude the specified path but also all its descendants from matching results. In contrast, `path.matchesGlob` only matches a glob pattern to an input string without supporting exclude patterns or additional options.\n\nThere is no way to replicate the full matching logic of `fs.glob` (including exclude semantics) using `path.matchesGlob` alone on a list of paths, such as when working with a virtual filesystem.\n\nExample:\n - `fs.glob({ include: '**/*', exclude: ['folder_a/folder_b'] })` will exclude `folder_a/folder_b` and all its contents.\n - However, using only `path.matchesGlob`, one cannot easily achieve the same exclusion behavior because the exclude pattern only matches the exact path, not its descendants.\n\n\n### What is the feature you are proposing to solve the problem?\n----------------------------------------------------------\n- Allow `path.matchesGlob` to accept an options argument (e.g., `{ exclude: [...] }`, and/or other options supported by `fs.glob`).\n- Ensure that exclusion patterns work the same way as in `fs.glob`, i.e., they exclude the matched path and all its descendants.\n- This will enable users to apply consistent glob-matching logic both for real file systems and for lists of paths (e.g., in virtual filesystems or in-memory path lists).\n\nExample API:\n```js\nconst include = '**/*';\nconst exclude = ['folder_a/folder_b'];\nconst path = 'folder_a/folder_b/file.js';\npath.matchesGlob(path, include, { exclude }); // returns false\n```\n\n\n### What alternatives have you considered?\n--------------------------------------\n- Manually replicating exclusion logic by writing custom code to check if a path is a descendant of any excluded folder. This approach is error-prone and leads to code duplication.\n\n\nThe proposed enhancement would provide parity and consistency between `fs.glob` and `path.matchesGlob`, improving developer experience and flexibility.\n\n\n","author":{"url":"https://github.com/mizulu","@type":"Person","name":"mizulu"},"datePublished":"2025-07-10T01:15:29.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/59015/node/issues/59015"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0ba35264-4d4e-d676-da8d-2e1990173878 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A8F0:2348DE:E43DBD:E96991:6A4DC27E |
| html-safe-nonce | b76043432804612c25dff40364413319b04c71afca3dc4c82a591ba62871ca90 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBOEYwOjIzNDhERTpFNDNEQkQ6RTk2OTkxOjZBNERDMjdFIiwidmlzaXRvcl9pZCI6IjQ1MjQ4NzI0MzQ2NjczNDA0MTQiLCJyZWdpb25fZWRnZSI6InNlYSIsInJlZ2lvbl9yZW5kZXIiOiJzZWEifQ== |
| visitor-hmac | 53469e51b4692097ad1d76ba265798fef712c51a2ebda8e9f4315e3d40bda961 |
| hovercard-subject-tag | issue:3217562730 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/59015/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1405eece33960804db64bf8af6e31a40b3f0702c35fbc9c6a5a7f3f5f1d134d3/nodejs/node/issues/59015 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1405eece33960804db64bf8af6e31a40b3f0702c35fbc9c6a5a7f3f5f1d134d3/nodejs/node/issues/59015 |
| og:image:alt | What is the problem this feature will solve? Currently, the fs.glob function in Node.js allows specifying advanced options such as exclude patterns, which not only exclude the specified path but al... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | mizulu |
| hostname | github.com |
| expected-hostname | github.com |
| None | 06b8a6144231bf3a234f1c2e9993861e07ce98a905912b114aa386c2d7e84b33 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 1d344bdb7547fe6bca17a59bb2b8aac3dc9532a0 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width