Skip to content

Fix suport for globstars at the start of patterns in braces - #150

Open
xuanduc987 wants to merge 1 commit into
micromatch:masterfrom
xuanduc987:push-kllzuqwlkxyr
Open

Fix suport for globstars at the start of patterns in braces#150
xuanduc987 wants to merge 1 commit into
micromatch:masterfrom
xuanduc987:push-kllzuqwlkxyr

Conversation

@xuanduc987

Copy link
Copy Markdown

Fixes #115

prisis added a commit to visulima/visulima that referenced this pull request Apr 18, 2026
Ships six new exports built on tinyglobby, is-glob, glob-parent and
picomatch — all bundled as devDependencies so @visulima/fs keeps a
clean runtime dep list.

- glob / globSync: async + sync file matching
- isGlob: detect whether a string looks like a glob pattern
- globParent: extract the static parent dir of a pattern
- match / matcher: picomatch-backed path matching, with a wrapper
  that shields Array.filter callers from picomatch's returnObject
  second-arg footgun

Each helper is also exposed via a dedicated subpath
(./glob, ./glob-parent, ./is-glob, ./match) for tree-shaking.

Pinned upstream patches (patches/README.md tracks each hunk):
- picomatch: constants.UNIGNORE + onIgnore-can-rescue, plus
  open PR micromatch/picomatch#150 (brace globstars)
- tinyglobby: negated-ignore patterns, issue #188 fix
  (negated extglobs at arbitrary depth), and issue #143
  perf guard (skip fdir exclude for trivial `**` patterns)

Docs in docs/api.mdx cover signatures, options (adapted from the
tinyglobby documentation with attribution), and negated-ignore
examples. Bench in __bench__/glob.bench.ts compares against
fast-glob, globby, node-glob and node:fs.glob. 553/553 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
prisis pushed a commit to visulima/visulima that referenced this pull request Apr 21, 2026
…fs [5.0.0-alpha.9](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.8...@visulima/fs@5.0.0-alpha.9) (2026-04-21)

### Features

* **fs:** add glob, isGlob, globParent, match helpers ([f0f0a2f](f0f0a2f)), closes [micromatch/picomatch#150](micromatch/picomatch#150) [#188](#188) [#143](#143)
* **fs:** add TOML, JSONC, JSON5, INI support with style preservation ([f07446c](f07446c))

### Bug Fixes

* **fs:** disable isolated declarations to unblock Windows CI ([e510ddf](e510ddf))
* **fs:** drop undefined retry fields from rm options ([c937df3](c937df3))

### Miscellaneous Chores

* bump engines.node to ^22.14.0 || >=24.10.0 ([c3d0931](c3d0931))
* fixed jsr.json ([5d85e51](5d85e51))
* **fs:** apply formatter and lint fixes ([6bd7a2d](6bd7a2d))
* **fs:** apply formatter and lint fixes ([f59a388](f59a388))
* **fs:** apply pending changes ([91490a8](91490a8))
* **fs:** apply pending lint and source updates ([9d1cf79](9d1cf79))
* **fs:** enforce curly braces and apply lint fixes ([b77fb0b](b77fb0b))
* lock update ([4c82df0](4c82df0))

### Continuous Integration

* disable isolatedDeclarationTransformer ([d5845d8](d5845d8))

### Dependencies

* **@visulima/error:** upgraded to 6.0.0-alpha.10
prisis pushed a commit to visulima/visulima that referenced this pull request Jul 3, 2026
https://github.com/visulima/visulima/compare/@visulima/fs@4.1.0...@visulima/fs@5.0.0) (2026-07-03)

### ⚠ BREAKING CHANGES

* change min node version to 22.13

### Features

* **fs:** add glob, isGlob, globParent, match helpers ([f0f0a2f](f0f0a2f)), closes [micromatch/picomatch#150](micromatch/picomatch#150) [#188](#188) [#143](#143)
* **fs:** add TOML, JSONC, JSON5, INI support with style preservation ([f07446c](f07446c))
* **fs:** include __bench__ in eslint tsconfig ([90ca264](90ca264))
* **web:** auto-generate packages page from workspace metadata ([623e520](623e520))

### Bug Fixes

* add new package image, fixed readme rendering on npm, fixed building of packages ([b790ba2](b790ba2))
* **filesystem:** resolve eslint issues in fs, path, and find-cache-dir ([59ad5e3](59ad5e3))
* **fs:** 2 bug fixes + 1 perf ([2fde6e6](2fde6e6))
* **fs:** disable isolated declarations to unblock Windows CI ([e510ddf](e510ddf))
* **fs:** drop undefined retry fields from rm options ([c937df3](c937df3))
* **fs:** fix walk symlinks, read/write/remove semantics, add copy ([d3d0070](d3d0070))
* **fs:** narrow walk directory type and drop unsupported parseJson generic ([2f709ba](2f709ba))
* **fs:** normalize file:// URL names via path's toPath in find-up ([124b2ce](124b2ce))
* **fs:** prevent walk/walkSync from crashing on symlinks pointing to files ([e6338b0](e6338b0))
* **fs:** properly fix eslint errors in code ([da36de3](da36de3))
* **fs:** relax no-unsafe-* rules and remove stale disable comments ([d49d900](d49d900))
* **fs:** remove remaining eslint suppressions with proper code fixes ([cede286](cede286))
* **fs:** resolve eslint errors ([817fd4d](817fd4d))
* **fs:** update package files ([be82cef](be82cef))
* **fs:** update packem to 2.0.0-alpha.54 ([017eb8b](017eb8b))
* **fs:** use workspace:* for internal [@visulima](https://github.com/visulima) deps ([419339e](419339e))
* **pail,fs:** bind logger.raw and inline picomatch options ([e8b20d2](e8b20d2))
* Remove JSR configuration generation script and generated jsr.json files ([#616](#616)) ([533744b](533744b))
* **storage-client:** percent-encode user fields in defaultFingerprint ([7c78a0f](7c78a0f))
* update Node.js engine version requirement to >=22.13 in multiple package.json files for improved compatibility ([b828e9a](b828e9a))
* update package OG images across multiple packages ([f08e4dd](f08e4dd))
* **vis:** stop Windows test hangs; start fallow dead-code cleanup ([e87ca70](e87ca70))
* **web:** improve build setup with incremental stats caching and prod install ([fe33e75](fe33e75))

### Performance Improvements

* **fs:** share walk entry accessors, disable keepNames ([7fbae0b](7fbae0b))

### Documentation

* **object,redact,colorize,path,fs:** add comprehensive Fumadocs documentation ([19c3840](19c3840))
* prettier-format agent instructions ([71b6414](71b6414))

### Styles

* cs fixes ([2a960bb](2a960bb))

### Miscellaneous Chores

* add fallow code-intelligence across all packages ([a3b4821](a3b4821))
* apply eslint + prettier autofixes across packages ([c1bb784](c1bb784))
* apply safe prettier and eslint formatting ([05120af](05120af))
* bump engines.node to ^22.14.0 || >=24.10.0 ([c3d0931](c3d0931))
* **ci-stability:** green CI across vis, native, lint, tests, attw ([#651](#651)) ([d4eb684](d4eb684))
* cs fixes ([#659](#659)) ([61f8912](61f8912))
* **filesystem:** remove empty dependency objects from package.json ([76ffc54](76ffc54))
* **filesystem:** update dependencies ([d1a4591](d1a4591))
* fixed jsr.json ([5d85e51](5d85e51))
* fixed project.json names and schema path ([964722f](964722f))
* **fs:** add tsconfig.eslint.json for type-aware linting ([701b2cb](701b2cb))
* **fs:** apply formatter and lint fixes ([6bd7a2d](6bd7a2d))
* **fs:** apply formatter and lint fixes ([f59a388](f59a388))
* **fs:** apply pending changes ([91490a8](91490a8))
* **fs:** apply pending lint and source updates ([9d1cf79](9d1cf79))
* **fs:** apply prettier and eslint formatting sweep ([6e442f3](6e442f3))
* **fs:** apply prettier and eslint quote-style auto-fix ([cc5525e](cc5525e))
* **fs:** apply prettier formatting ([29bc3ed](29bc3ed))
* **fs:** apply prettier formatting across src and tests ([03409d7](03409d7))
* **fs:** bump bench glob and globby to latest majors ([9f9fe58](9f9fe58))
* **fs:** enforce curly braces and apply lint fixes ([b77fb0b](b77fb0b))
* **fs:** housekeeping cleanup ([95e8643](95e8643))
* **fs:** migrate .prettierrc.cjs to prettier.config.js ([fa37870](fa37870))
* **fs:** migrate deps to pnpm catalogs ([02ac1ae](02ac1ae))
* **fs:** update dependencies ([2f21870](2f21870))
* **fs:** update dependencies ([5b63f2b](5b63f2b))
* **fs:** update dependencies ([05c4ca6](05c4ca6))
* **fs:** upgrade packem to 2.0.0-alpha.76 ([3dfa709](3dfa709))
* jsr.json update and lock file ([73fce38](73fce38))
* lock update ([4c82df0](4c82df0))
* moved all packages into groups ([0615e9d](0615e9d))
* re-sort workspace package.json files via vis sort-package-json ([f625696](f625696))
* **release:** @visulima/fs@5.0.0-alpha.1 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.1](https://github.com/visulima/visulima/compare/@visulima/fs@4.1.0...@visulima/fs@5.0.0-alpha.1) (2025-12-07) ([fe6efd0](fe6efd0))
* **release:** @visulima/fs@5.0.0-alpha.10 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.10](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.9...@visulima/fs@5.0.0-alpha.10) (2026-04-21) ([0c30975](0c30975))
* **release:** @visulima/fs@5.0.0-alpha.11 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.11](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.10...@visulima/fs@5.0.0-alpha.11) (2026-04-21) ([ac2b595](ac2b595))
* **release:** @visulima/fs@5.0.0-alpha.12 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.12](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.11...@visulima/fs@5.0.0-alpha.12) (2026-04-22) ([7f0eb48](7f0eb48))
* **release:** @visulima/fs@5.0.0-alpha.13 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.13](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.12...@visulima/fs@5.0.0-alpha.13) (2026-05-04) ([e5cdb76](e5cdb76))
* **release:** @visulima/fs@5.0.0-alpha.14 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.14](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.13...@visulima/fs@5.0.0-alpha.14) (2026-05-06) ([24ad220](24ad220))
* **release:** @visulima/fs@5.0.0-alpha.15 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.15](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.14...@visulima/fs@5.0.0-alpha.15) (2026-05-06) ([a17462e](a17462e))
* **release:** @visulima/fs@5.0.0-alpha.16 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.16](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.15...@visulima/fs@5.0.0-alpha.16) (2026-05-07) ([e85753d](e85753d))
* **release:** @visulima/fs@5.0.0-alpha.17 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.17](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.16...@visulima/fs@5.0.0-alpha.17) (2026-05-07) ([1c78b3e](1c78b3e))
* **release:** @visulima/fs@5.0.0-alpha.18 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.18](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.17...@visulima/fs@5.0.0-alpha.18) (2026-05-10) ([71dcf53](71dcf53))
* **release:** @visulima/fs@5.0.0-alpha.19 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.19](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.18...@visulima/fs@5.0.0-alpha.19) (2026-05-10) ([976cb1b](976cb1b))
* **release:** @visulima/fs@5.0.0-alpha.2 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.2](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.1...@visulima/fs@5.0.0-alpha.2) (2025-12-11) ([e5a83ea](e5a83ea))
* **release:** @visulima/fs@5.0.0-alpha.20 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.20](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.19...@visulima/fs@5.0.0-alpha.20) (2026-05-11) ([80ddc9c](80ddc9c))
* **release:** @visulima/fs@5.0.0-alpha.21 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.21](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.20...@visulima/fs@5.0.0-alpha.21) (2026-05-11) ([5da30a4](5da30a4))
* **release:** @visulima/fs@5.0.0-alpha.22 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.22](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.21...@visulima/fs@5.0.0-alpha.22) (2026-05-14) ([bffff8a](bffff8a))
* **release:** @visulima/fs@5.0.0-alpha.23 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.23](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.22...@visulima/fs@5.0.0-alpha.23) (2026-05-16) ([c94bf94](c94bf94))
* **release:** @visulima/fs@5.0.0-alpha.24 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.24](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.23...@visulima/fs@5.0.0-alpha.24) (2026-05-19) ([d9998bd](d9998bd))
* **release:** @visulima/fs@5.0.0-alpha.25 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.25](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.24...@visulima/fs@5.0.0-alpha.25) (2026-05-20) ([8dde93f](8dde93f))
* **release:** @visulima/fs@5.0.0-alpha.26 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.26](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.25...@visulima/fs@5.0.0-alpha.26) (2026-05-26) ([a1168eb](a1168eb))
* **release:** @visulima/fs@5.0.0-alpha.27 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.27](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.26...@visulima/fs@5.0.0-alpha.27) (2026-05-26) ([ba59301](ba59301))
* **release:** @visulima/fs@5.0.0-alpha.28 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.28](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.27...@visulima/fs@5.0.0-alpha.28) (2026-05-27) ([34b1a06](34b1a06))
* **release:** @visulima/fs@5.0.0-alpha.29 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.29](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.28...@visulima/fs@5.0.0-alpha.29) (2026-06-02) ([069d936](069d936))
* **release:** @visulima/fs@5.0.0-alpha.3 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.3](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.2...@visulima/fs@5.0.0-alpha.3) (2025-12-27) ([b322cdc](b322cdc))
* **release:** @visulima/fs@5.0.0-alpha.30 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.30](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.29...@visulima/fs@5.0.0-alpha.30) (2026-06-04) ([3bc7c3e](3bc7c3e))
* **release:** @visulima/fs@5.0.0-alpha.31 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.31](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.30...@visulima/fs@5.0.0-alpha.31) (2026-06-04) ([0e8ed0f](0e8ed0f))
* **release:** @visulima/fs@5.0.0-alpha.32 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.32](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.31...@visulima/fs@5.0.0-alpha.32) (2026-06-13) ([ab53856](ab53856))
* **release:** @visulima/fs@5.0.0-alpha.33 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.33](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.32...@visulima/fs@5.0.0-alpha.33) (2026-06-30) ([65aeb52](65aeb52))
* **release:** @visulima/fs@5.0.0-alpha.4 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.4](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.3...@visulima/fs@5.0.0-alpha.4) (2026-03-06) ([19a7e58](19a7e58))
* **release:** @visulima/fs@5.0.0-alpha.5 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.5](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.4...@visulima/fs@5.0.0-alpha.5) (2026-03-26) ([efe61b7](efe61b7))
* **release:** @visulima/fs@5.0.0-alpha.6 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.6](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.5...@visulima/fs@5.0.0-alpha.6) (2026-03-26) ([cb69642](cb69642))
* **release:** @visulima/fs@5.0.0-alpha.7 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.7](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.6...@visulima/fs@5.0.0-alpha.7) (2026-04-08) ([0764b69](0764b69))
* **release:** @visulima/fs@5.0.0-alpha.8 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.8](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.7...@visulima/fs@5.0.0-alpha.8) (2026-04-15) ([f4d569c](f4d569c))
* **release:** @visulima/fs@5.0.0-alpha.9 [skip ci]\n\n## @visulima/fs [5.0.0-alpha.9](https://github.com/visulima/visulima/compare/@visulima/fs@5.0.0-alpha.8...@visulima/fs@5.0.0-alpha.9) (2026-04-21) ([bdbb15d](bdbb15d))
* **repo:** sort package.json keys across all packages ([e1fd9ab](e1fd9ab))
* simplify pnpm-workspace packages list ([7cab221](7cab221))
* sorted package.json ([b47c545](b47c545))
* update @anolilab/semantic-release-pnpm and @anolilab/semantic-release-preset to versions 3.2.2 and 12.1.2 across multiple package.json files for improved compatibility ([3921626](3921626))
* update dependencies across multiple packages to improve compatibility and performance, including upgrading `@anolilab/semantic-release-pnpm` and `@anolilab/semantic-release-preset` to versions 3.2.0 and 12.1.0 respectively, and updating `react`, `react-dom`, and `next` versions to 19.2.1 and 16.0.7 in various package.json files ([aee8fcd](aee8fcd))
* update homepage URLs to visulima.com/packages/ format ([be42968](be42968))
* update lock file maintenance ([d83e716](d83e716))
* update the jsr.json ([864ab7e](864ab7e))
* visulima website ([#591](#591)) ([59ab2e2](59ab2e2))
* year update ([47f4105](47f4105))

### Code Refactoring

* **fs-bench:** move fixture creation to pretest:bench + idempotent ([767dc11](767dc11))

### Tests

* **fs:** cover ini-preserve rewrites, sanitize fallbacks, json5 hooks, walk symlinks, and move/remove options ([6e61c3a](6e61c3a))
* **fs:** expect ENOENT (not EPERM) for readJson on a missing file ([7ccb840](7ccb840))
* improve coverage across packages ([91bd6d3](91bd6d3))
* repair cerebro, fs, colorize bench CI runs ([03b530e](03b530e))
* **repo:** add dist runtime + types integration tests ([32ee300](32ee300))

### Build System

* **deps:** update fs dependencies ([f30e540](f30e540))
* regenerate bundled-license manifests and types ordering ([af26588](af26588))

### Continuous Integration

* disable isolatedDeclarationTransformer ([d5845d8](d5845d8))
* **fallow:** make fallow:health advisory (--report-only) ([d57148e](d57148e))
* **fs-bench:** skip fixture postinstall on windows ([906bfd4](906bfd4))
* integrate codspeed for benchmark tracking ([e758f3d](e758f3d))

### Dependencies

* **@visulima/path:** upgraded to 3.0.0
* **@visulima/error:** upgraded to 6.0.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] globstar doesn't match paths that have no leading directories when used under a brace

1 participant