globlin 1.0.0-beta.1
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.
- package/CHANGELOG.md +114 -0
- package/LICENSE +76 -0
- package/README.md +276 -0
- package/index.d.ts +399 -0
- package/index.js +325 -0
- package/js/index.d.ts +475 -0
- package/js/index.d.ts.map +1 -0
- package/js/index.js +924 -0
- package/js/stream.d.ts +41 -0
- package/js/stream.d.ts.map +1 -0
- package/js/stream.js +94 -0
- package/js/types.d.ts +141 -0
- package/js/types.d.ts.map +1 -0
- package/js/types.js +8 -0
- package/package.json +189 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Future features will be documented here
|
|
12
|
+
|
|
13
|
+
## [1.0.0] - 2026-01-06
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
#### Core API
|
|
18
|
+
- `glob(pattern, options)` - async glob function with Promise return
|
|
19
|
+
- `globSync(pattern, options)` - synchronous glob function
|
|
20
|
+
- `globStream(pattern, options)` - streaming API returning Minipass stream
|
|
21
|
+
- `globStreamSync(pattern, options)` - synchronous streaming API
|
|
22
|
+
- `globIterate(pattern, options)` - async generator for iteration
|
|
23
|
+
- `globIterateSync(pattern, options)` - sync generator for iteration
|
|
24
|
+
|
|
25
|
+
#### Glob Class
|
|
26
|
+
- `Glob` class with `walk()`, `walkSync()`, `stream()`, `streamSync()`, `iterate()`, `iterateSync()` methods
|
|
27
|
+
- Full iterator protocol support (`Symbol.asyncIterator`, `Symbol.iterator`)
|
|
28
|
+
- Cache reuse by passing Glob instance as options
|
|
29
|
+
|
|
30
|
+
#### Utility Functions
|
|
31
|
+
- `hasMagic(pattern, options)` - check if pattern contains glob magic
|
|
32
|
+
- `escape(pattern, options)` - escape glob magic characters
|
|
33
|
+
- `unescape(pattern, options)` - unescape glob magic characters
|
|
34
|
+
|
|
35
|
+
#### Pattern Support
|
|
36
|
+
- Basic glob patterns: `*`, `?`, `**`
|
|
37
|
+
- Brace expansion: `{a,b}`, `{1..5}`, `{a..z}`
|
|
38
|
+
- Extglob patterns: `+(a|b)`, `*(a|b)`, `?(a|b)`, `@(a|b)`
|
|
39
|
+
- Character classes: `[abc]`, `[a-z]`, `[!abc]`
|
|
40
|
+
- POSIX character classes: `[:alpha:]`, `[:digit:]`, etc.
|
|
41
|
+
- Negation patterns: `!pattern`
|
|
42
|
+
|
|
43
|
+
#### Options
|
|
44
|
+
- `cwd` - working directory
|
|
45
|
+
- `absolute` - return absolute paths
|
|
46
|
+
- `nodir` - exclude directories
|
|
47
|
+
- `dot` - include dotfiles
|
|
48
|
+
- `nocase` - case-insensitive matching (platform defaults)
|
|
49
|
+
- `ignore` - patterns to ignore (string, array, or custom object)
|
|
50
|
+
- `follow` - follow symlinks
|
|
51
|
+
- `maxDepth` - limit traversal depth
|
|
52
|
+
- `matchBase` - match basename only
|
|
53
|
+
- `mark` - append `/` to directories
|
|
54
|
+
- `dotRelative` - prepend `./` to relative paths
|
|
55
|
+
- `posix` - use POSIX paths on Windows
|
|
56
|
+
- `withFileTypes` - return PathScurry Path objects
|
|
57
|
+
- `stat` - populate file stats
|
|
58
|
+
- `realpath` - resolve symlinks to real paths
|
|
59
|
+
- `signal` - AbortSignal for cancellation
|
|
60
|
+
- `nobrace` - disable brace expansion
|
|
61
|
+
- `noext` - disable extglob
|
|
62
|
+
- `noglobstar` - disable `**` matching
|
|
63
|
+
- `platform` - specify target platform
|
|
64
|
+
- `windowsPathsNoEscape` - treat `\` as path separator on Windows
|
|
65
|
+
- `includeChildMatches` - include/exclude child matches
|
|
66
|
+
- `parallel` - enable parallel directory walking (globlin-specific)
|
|
67
|
+
- `cache` - enable directory caching (globlin-specific)
|
|
68
|
+
|
|
69
|
+
#### Platform Support
|
|
70
|
+
- Linux (x64, arm64, musl)
|
|
71
|
+
- macOS (x64, arm64/Apple Silicon)
|
|
72
|
+
- Windows (x64, arm64)
|
|
73
|
+
|
|
74
|
+
#### Platform Optimizations
|
|
75
|
+
- Linux: `getdents64` syscall for faster directory reading
|
|
76
|
+
- macOS: GCD integration, APFS optimizations, ARM NEON SIMD
|
|
77
|
+
- Windows: UNC path support, drive letter handling
|
|
78
|
+
|
|
79
|
+
#### Performance Features
|
|
80
|
+
- Depth-limited walking for simple patterns
|
|
81
|
+
- Prefix-based walk root optimization
|
|
82
|
+
- Directory pruning for scoped patterns
|
|
83
|
+
- Fast-path matching for extension patterns
|
|
84
|
+
- Static pattern direct stat optimization
|
|
85
|
+
- Pattern caching with LRU eviction
|
|
86
|
+
- Optional parallel walking via rayon/jwalk
|
|
87
|
+
|
|
88
|
+
#### Re-exports
|
|
89
|
+
- `Minimatch`, `minimatch` from minimatch
|
|
90
|
+
- `PathScurry`, `Path` from path-scurry
|
|
91
|
+
- `Minipass` from minipass
|
|
92
|
+
|
|
93
|
+
### Performance
|
|
94
|
+
|
|
95
|
+
- **2-3x faster** than glob v13 on average
|
|
96
|
+
- **2.5-2.8x faster** on large directories (100k+ files)
|
|
97
|
+
- **7-11x faster** on static patterns (e.g., `package.json`)
|
|
98
|
+
- Competitive with fast-glob on all pattern types
|
|
99
|
+
- I/O-bound workloads limit theoretical maximum speedup
|
|
100
|
+
|
|
101
|
+
### Compatibility
|
|
102
|
+
|
|
103
|
+
- 100% API compatible with glob v13
|
|
104
|
+
- Drop-in replacement: change `import { glob } from 'glob'` to `import { glob } from 'globlin'`
|
|
105
|
+
- 97% test compatibility (1383 passing tests)
|
|
106
|
+
- Known limitations:
|
|
107
|
+
- Custom `fs` module not supported (intentional)
|
|
108
|
+
- `scurry` option not supported (intentional)
|
|
109
|
+
- `!(pattern)` extglob negation has edge case differences
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
[unreleased]: https://github.com/yourusername/globlin/compare/v1.0.0...HEAD
|
|
114
|
+
[1.0.0]: https://github.com/yourusername/globlin/releases/tag/v1.0.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Anomaly
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Attribution
|
|
26
|
+
|
|
27
|
+
Globlin is built upon the excellent work of:
|
|
28
|
+
|
|
29
|
+
### glob
|
|
30
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
31
|
+
https://github.com/isaacs/node-glob
|
|
32
|
+
Licensed under ISC License
|
|
33
|
+
|
|
34
|
+
### minimatch
|
|
35
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
36
|
+
https://github.com/isaacs/minimatch
|
|
37
|
+
Licensed under ISC License
|
|
38
|
+
|
|
39
|
+
### path-scurry
|
|
40
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
41
|
+
https://github.com/isaacs/path-scurry
|
|
42
|
+
Licensed under BlueOak-1.0.0 License
|
|
43
|
+
|
|
44
|
+
### minipass
|
|
45
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
46
|
+
https://github.com/isaacs/minipass
|
|
47
|
+
Licensed under ISC License
|
|
48
|
+
|
|
49
|
+
### NAPI-RS
|
|
50
|
+
Copyright (c) LongYinan and NAPI-RS Contributors
|
|
51
|
+
https://github.com/napi-rs/napi-rs
|
|
52
|
+
Licensed under MIT License
|
|
53
|
+
|
|
54
|
+
### walkdir
|
|
55
|
+
Copyright (c) Andrew Gallant
|
|
56
|
+
https://github.com/BurntSushi/walkdir
|
|
57
|
+
Licensed under MIT/Unlicense
|
|
58
|
+
|
|
59
|
+
### jwalk
|
|
60
|
+
Copyright (c) Byron Hood and Contributors
|
|
61
|
+
https://github.com/byron/jwalk
|
|
62
|
+
Licensed under MIT License
|
|
63
|
+
|
|
64
|
+
### rayon
|
|
65
|
+
Copyright (c) Niko Matsakis, Josh Stone, and Contributors
|
|
66
|
+
https://github.com/rayon-rs/rayon
|
|
67
|
+
Licensed under MIT/Apache-2.0 License
|
|
68
|
+
|
|
69
|
+
### fancy-regex
|
|
70
|
+
Copyright (c) The fancy-regex Authors
|
|
71
|
+
https://github.com/fancy-regex/fancy-regex
|
|
72
|
+
Licensed under MIT License
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
Additional Rust dependencies are listed in Cargo.toml with their respective licenses.
|
package/README.md
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="www/public/globlin-logo.svg" alt="globlin" height="80" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/globlin"><img src="https://img.shields.io/npm/v/globlin.svg" alt="npm version" /></a>
|
|
7
|
+
<a href="https://github.com/capsoftware/globlin/actions/workflows/test.yml"><img src="https://github.com/capsoftware/globlin/actions/workflows/test.yml/badge.svg" alt="CI" /></a>
|
|
8
|
+
<a href="https://codecov.io/gh/capsoftware/globlin"><img src="https://codecov.io/gh/capsoftware/globlin/graph/badge.svg" alt="codecov" /></a>
|
|
9
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT" /></a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
**A high-performance glob pattern matcher for Node.js, built in Rust.**
|
|
13
|
+
|
|
14
|
+
Globlin is a drop-in replacement for [glob](https://github.com/isaacs/node-glob) v13 that delivers **2-3x faster** performance on large directories while maintaining 100% API compatibility.
|
|
15
|
+
|
|
16
|
+
From the team behind [Cap](https://cap.so).
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- **Fast**: 2-3x faster than glob v13 on large directories (100k+ files)
|
|
21
|
+
- **Drop-in replacement**: Same API, same options, same behavior
|
|
22
|
+
- **Cross-platform**: Linux, macOS, Windows (x64 and ARM64)
|
|
23
|
+
- **Zero config**: Just replace your import
|
|
24
|
+
- **Full pattern support**: `*`, `**`, `?`, `[abc]`, `{a,b}`, extglobs, POSIX classes
|
|
25
|
+
- **TypeScript first**: Complete type definitions included
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install globlin
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { glob, globSync } from 'globlin'
|
|
37
|
+
|
|
38
|
+
// Async
|
|
39
|
+
const files = await glob('**/*.js')
|
|
40
|
+
|
|
41
|
+
// Sync
|
|
42
|
+
const files = globSync('**/*.ts')
|
|
43
|
+
|
|
44
|
+
// With options
|
|
45
|
+
const files = await glob('src/**/*.{js,ts}', {
|
|
46
|
+
ignore: ['node_modules/**'],
|
|
47
|
+
dot: true
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Migration from glob
|
|
52
|
+
|
|
53
|
+
Globlin is designed as a drop-in replacement. Just change your import:
|
|
54
|
+
|
|
55
|
+
```diff
|
|
56
|
+
- import { glob, globSync } from 'glob'
|
|
57
|
+
+ import { glob, globSync } from 'globlin'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
All APIs, options, and behaviors match glob v13.
|
|
61
|
+
|
|
62
|
+
## API
|
|
63
|
+
|
|
64
|
+
### Functions
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// Async - returns Promise<string[]>
|
|
68
|
+
glob(pattern: string | string[], options?: GlobOptions): Promise<string[]>
|
|
69
|
+
|
|
70
|
+
// Sync - returns string[]
|
|
71
|
+
globSync(pattern: string | string[], options?: GlobOptions): string[]
|
|
72
|
+
|
|
73
|
+
// Streaming - returns Minipass stream
|
|
74
|
+
globStream(pattern: string | string[], options?: GlobOptions): Minipass<string>
|
|
75
|
+
globStreamSync(pattern: string | string[], options?: GlobOptions): Minipass<string>
|
|
76
|
+
|
|
77
|
+
// Iterators - returns generators
|
|
78
|
+
globIterate(pattern: string | string[], options?: GlobOptions): AsyncGenerator<string>
|
|
79
|
+
globIterateSync(pattern: string | string[], options?: GlobOptions): Generator<string>
|
|
80
|
+
|
|
81
|
+
// Utilities
|
|
82
|
+
hasMagic(pattern: string | string[], options?: GlobOptions): boolean
|
|
83
|
+
escape(pattern: string, options?: GlobOptions): string
|
|
84
|
+
unescape(pattern: string, options?: GlobOptions): string
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Glob Class
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
const g = new Glob('**/*.js', { cwd: '/project', dot: true })
|
|
91
|
+
|
|
92
|
+
// Methods
|
|
93
|
+
await g.walk() // Promise<string[]>
|
|
94
|
+
g.walkSync() // string[]
|
|
95
|
+
g.stream() // Minipass<string>
|
|
96
|
+
g.streamSync() // Minipass<string>
|
|
97
|
+
g.iterate() // AsyncGenerator<string>
|
|
98
|
+
g.iterateSync() // Generator<string>
|
|
99
|
+
|
|
100
|
+
// Iteration
|
|
101
|
+
for await (const file of g) { }
|
|
102
|
+
for (const file of g) { }
|
|
103
|
+
|
|
104
|
+
// Cache reuse (pass Glob as options)
|
|
105
|
+
const g2 = new Glob('**/*.ts', g) // Inherits options from g
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Options
|
|
109
|
+
|
|
110
|
+
All glob v13 options are supported:
|
|
111
|
+
|
|
112
|
+
| Option | Type | Default | Description |
|
|
113
|
+
|--------|------|---------|-------------|
|
|
114
|
+
| `cwd` | `string` | `process.cwd()` | Current working directory |
|
|
115
|
+
| `dot` | `boolean` | `false` | Include dotfiles |
|
|
116
|
+
| `ignore` | `string \| string[]` | - | Patterns to ignore |
|
|
117
|
+
| `follow` | `boolean` | `false` | Follow symlinks in `**` |
|
|
118
|
+
| `nodir` | `boolean` | `false` | Exclude directories |
|
|
119
|
+
| `absolute` | `boolean` | `false` | Return absolute paths |
|
|
120
|
+
| `nocase` | `boolean` | OS-based | Case-insensitive matching |
|
|
121
|
+
| `maxDepth` | `number` | - | Maximum directory depth |
|
|
122
|
+
| `mark` | `boolean` | `false` | Append `/` to directories |
|
|
123
|
+
| `dotRelative` | `boolean` | `false` | Prepend `./` to relative paths |
|
|
124
|
+
| `withFileTypes` | `boolean` | `false` | Return `Path` objects |
|
|
125
|
+
| `signal` | `AbortSignal` | - | Abort signal for cancellation |
|
|
126
|
+
|
|
127
|
+
See the [full options reference](docs/api/options.md) for all 22 options.
|
|
128
|
+
|
|
129
|
+
### Pattern Syntax
|
|
130
|
+
|
|
131
|
+
| Pattern | Description | Example |
|
|
132
|
+
|---------|-------------|---------|
|
|
133
|
+
| `*` | Match any characters except `/` | `*.js` matches `foo.js` |
|
|
134
|
+
| `**` | Match any path segments | `**/*.js` matches `a/b/c.js` |
|
|
135
|
+
| `?` | Match single character | `file?.js` matches `file1.js` |
|
|
136
|
+
| `[abc]` | Character class | `[abc].js` matches `a.js` |
|
|
137
|
+
| `[a-z]` | Character range | `[a-z].js` matches `x.js` |
|
|
138
|
+
| `{a,b}` | Alternatives | `{a,b}.js` matches `a.js`, `b.js` |
|
|
139
|
+
| `{1..3}` | Numeric range | `file{1..3}.js` matches `file1.js`, `file2.js`, `file3.js` |
|
|
140
|
+
| `+(a\|b)` | One or more | `+(foo\|bar).js` matches `foofoo.js` |
|
|
141
|
+
| `*(a\|b)` | Zero or more | `*(foo\|bar).js` matches `foo.js` |
|
|
142
|
+
| `?(a\|b)` | Zero or one | `?(foo).js` matches `.js`, `foo.js` |
|
|
143
|
+
| `@(a\|b)` | Exactly one | `@(foo\|bar).js` matches `foo.js` |
|
|
144
|
+
| `!(a\|b)` | Negation | `!(foo).js` matches `bar.js` |
|
|
145
|
+
|
|
146
|
+
## Performance
|
|
147
|
+
|
|
148
|
+
Benchmarks comparing globlin vs glob v13 vs fast-glob (Apple M1 Pro, SSD):
|
|
149
|
+
|
|
150
|
+
### Large Directory (100,000 files)
|
|
151
|
+
|
|
152
|
+
| Pattern | glob | fast-glob | Globlin | vs glob | vs fast-glob |
|
|
153
|
+
|---------|------|-----------|---------|---------|--------------|
|
|
154
|
+
| `**/*.js` | 318ms | 132ms | 150ms | **2.1x** | 0.9x |
|
|
155
|
+
| `**/*` | 256ms | 115ms | 121ms | **2.1x** | 1.0x |
|
|
156
|
+
| `**/*.{js,ts}` | 276ms | 115ms | 113ms | **2.5x** | **1.0x** |
|
|
157
|
+
| `*.js` | 30ms | 12ms | 9ms | **3.4x** | **1.4x** |
|
|
158
|
+
| `level0/**/*.js` | 231ms | 126ms | 134ms | **1.7x** | 0.9x |
|
|
159
|
+
| Static patterns | 0.05ms | 0.02ms | 0.01ms | **5.6x** | **2.2x** |
|
|
160
|
+
|
|
161
|
+
### Summary by Fixture Size
|
|
162
|
+
|
|
163
|
+
| Fixture | Files | Avg vs glob | Avg vs fast-glob |
|
|
164
|
+
|---------|-------|-------------|------------------|
|
|
165
|
+
| Small | 303 | **3.2x** | **1.8x** |
|
|
166
|
+
| Medium | 20,003 | **2.3x** | **1.3x** |
|
|
167
|
+
| Large | 100,000 | **3.0x** | **1.3x** |
|
|
168
|
+
|
|
169
|
+
### Summary by Pattern Type
|
|
170
|
+
|
|
171
|
+
| Pattern Type | vs glob | vs fast-glob |
|
|
172
|
+
|--------------|---------|--------------|
|
|
173
|
+
| Static (`package.json`) | **7.5x** | **3.2x** |
|
|
174
|
+
| Simple (`*.js`) | **2.8x** | **1.5x** |
|
|
175
|
+
| Recursive (`**/*.js`) | **1.7x** | 1.0x |
|
|
176
|
+
| Brace Expansion (`**/*.{js,ts}`) | **2.0x** | **1.1x** |
|
|
177
|
+
|
|
178
|
+
**Overall: 2.8x faster than glob, competitive with fast-glob.**
|
|
179
|
+
|
|
180
|
+
### Performance Characteristics
|
|
181
|
+
|
|
182
|
+
Glob operations are I/O-bound (~85% of execution time is spent in `readdir` syscalls). Globlin optimizes both I/O and CPU:
|
|
183
|
+
|
|
184
|
+
- **I/O reduction**: Depth-limited walking, prefix-based traversal, directory pruning
|
|
185
|
+
- **CPU optimization**: Rust pattern matching, fast-path extensions, compiled patterns
|
|
186
|
+
- **Static patterns**: Near-instant lookups without directory traversal
|
|
187
|
+
|
|
188
|
+
### When to Use Globlin
|
|
189
|
+
|
|
190
|
+
- **Large directories** (1000+ files): 2-3x faster
|
|
191
|
+
- **Build tools**: Webpack, Rollup, esbuild plugins
|
|
192
|
+
- **Test runners**: Jest, Vitest, Mocha file discovery
|
|
193
|
+
- **Linters**: ESLint, Prettier file matching
|
|
194
|
+
- **Monorepos**: Multiple package traversal
|
|
195
|
+
|
|
196
|
+
## Compatibility
|
|
197
|
+
|
|
198
|
+
### Supported APIs
|
|
199
|
+
|
|
200
|
+
- All 6 core functions (`glob`, `globSync`, `globStream`, `globStreamSync`, `globIterate`, `globIterateSync`)
|
|
201
|
+
- Full `Glob` class with 8 methods and iterator protocols
|
|
202
|
+
- All 3 utility functions (`hasMagic`, `escape`, `unescape`)
|
|
203
|
+
- All 22 options (except `fs` and `scurry` which are Node.js-specific)
|
|
204
|
+
- Re-exports: `Minimatch`, `minimatch`, `PathScurry`, `Path`, `Minipass`
|
|
205
|
+
|
|
206
|
+
### Supported Platforms
|
|
207
|
+
|
|
208
|
+
| Platform | Architecture | Status |
|
|
209
|
+
|----------|--------------|--------|
|
|
210
|
+
| Linux | x64 | Supported |
|
|
211
|
+
| Linux | ARM64 | Supported |
|
|
212
|
+
| Linux (musl) | x64, ARM64 | Supported |
|
|
213
|
+
| macOS | x64 | Supported |
|
|
214
|
+
| macOS | ARM64 (Apple Silicon) | Supported |
|
|
215
|
+
| Windows | x64 | Supported |
|
|
216
|
+
| Windows | ARM64 | Supported |
|
|
217
|
+
|
|
218
|
+
### Node.js Versions
|
|
219
|
+
|
|
220
|
+
- Node.js 20.x: Supported
|
|
221
|
+
- Node.js 22.x: Supported
|
|
222
|
+
|
|
223
|
+
## Documentation
|
|
224
|
+
|
|
225
|
+
- [Migration Guide](docs/guides/migration-from-glob.md)
|
|
226
|
+
- [Performance Tuning](docs/guides/performance-tuning.md)
|
|
227
|
+
- [API Reference](docs/api/glob.md)
|
|
228
|
+
- [Options Reference](docs/api/options.md)
|
|
229
|
+
|
|
230
|
+
## Contributing
|
|
231
|
+
|
|
232
|
+
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
|
|
233
|
+
|
|
234
|
+
### Development
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Install dependencies
|
|
238
|
+
npm install
|
|
239
|
+
|
|
240
|
+
# Build the native module
|
|
241
|
+
npm run build
|
|
242
|
+
|
|
243
|
+
# Run tests
|
|
244
|
+
npm test
|
|
245
|
+
|
|
246
|
+
# Run benchmarks
|
|
247
|
+
npm run bench
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Running Benchmarks
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
# Quick benchmark (small fixture)
|
|
254
|
+
npm run bench:small
|
|
255
|
+
|
|
256
|
+
# Standard benchmark (medium fixture, 20k files)
|
|
257
|
+
npm run bench:medium
|
|
258
|
+
|
|
259
|
+
# Full benchmark (large fixture, 100k files)
|
|
260
|
+
npm run bench:large
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Credits
|
|
264
|
+
|
|
265
|
+
- [glob](https://github.com/isaacs/node-glob) - The original glob implementation that this project aims to replace
|
|
266
|
+
- [minimatch](https://github.com/isaacs/minimatch) - Pattern matching library
|
|
267
|
+
- [path-scurry](https://github.com/isaacs/path-scurry) - Path resolution library
|
|
268
|
+
- [NAPI-RS](https://napi.rs/) - Rust bindings for Node.js
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
**Globlin** is built by [Anomaly](https://anomaly.co), the team behind [Cap](https://cap.so).
|