@depup/glob 13.0.6-depup.23

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 (66) hide show
  1. package/LICENSE.md +63 -0
  2. package/README.md +31 -0
  3. package/changes.json +10 -0
  4. package/dist/commonjs/glob.d.ts +396 -0
  5. package/dist/commonjs/glob.d.ts.map +1 -0
  6. package/dist/commonjs/glob.js +248 -0
  7. package/dist/commonjs/glob.js.map +1 -0
  8. package/dist/commonjs/has-magic.d.ts +14 -0
  9. package/dist/commonjs/has-magic.d.ts.map +1 -0
  10. package/dist/commonjs/has-magic.js +27 -0
  11. package/dist/commonjs/has-magic.js.map +1 -0
  12. package/dist/commonjs/ignore.d.ts +24 -0
  13. package/dist/commonjs/ignore.d.ts.map +1 -0
  14. package/dist/commonjs/ignore.js +119 -0
  15. package/dist/commonjs/ignore.js.map +1 -0
  16. package/dist/commonjs/index.d.ts +97 -0
  17. package/dist/commonjs/index.d.ts.map +1 -0
  18. package/dist/commonjs/index.js +68 -0
  19. package/dist/commonjs/index.js.map +1 -0
  20. package/dist/commonjs/index.min.js +4 -0
  21. package/dist/commonjs/index.min.js.map +7 -0
  22. package/dist/commonjs/package.json +3 -0
  23. package/dist/commonjs/pattern.d.ts +79 -0
  24. package/dist/commonjs/pattern.d.ts.map +1 -0
  25. package/dist/commonjs/pattern.js +223 -0
  26. package/dist/commonjs/pattern.js.map +1 -0
  27. package/dist/commonjs/processor.d.ts +59 -0
  28. package/dist/commonjs/processor.d.ts.map +1 -0
  29. package/dist/commonjs/processor.js +301 -0
  30. package/dist/commonjs/processor.js.map +1 -0
  31. package/dist/commonjs/walker.d.ts +97 -0
  32. package/dist/commonjs/walker.d.ts.map +1 -0
  33. package/dist/commonjs/walker.js +387 -0
  34. package/dist/commonjs/walker.js.map +1 -0
  35. package/dist/esm/glob.d.ts +396 -0
  36. package/dist/esm/glob.d.ts.map +1 -0
  37. package/dist/esm/glob.js +244 -0
  38. package/dist/esm/glob.js.map +1 -0
  39. package/dist/esm/has-magic.d.ts +14 -0
  40. package/dist/esm/has-magic.d.ts.map +1 -0
  41. package/dist/esm/has-magic.js +23 -0
  42. package/dist/esm/has-magic.js.map +1 -0
  43. package/dist/esm/ignore.d.ts +24 -0
  44. package/dist/esm/ignore.d.ts.map +1 -0
  45. package/dist/esm/ignore.js +115 -0
  46. package/dist/esm/ignore.js.map +1 -0
  47. package/dist/esm/index.d.ts +97 -0
  48. package/dist/esm/index.d.ts.map +1 -0
  49. package/dist/esm/index.js +55 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/dist/esm/index.min.js +4 -0
  52. package/dist/esm/index.min.js.map +7 -0
  53. package/dist/esm/package.json +3 -0
  54. package/dist/esm/pattern.d.ts +79 -0
  55. package/dist/esm/pattern.d.ts.map +1 -0
  56. package/dist/esm/pattern.js +219 -0
  57. package/dist/esm/pattern.js.map +1 -0
  58. package/dist/esm/processor.d.ts +59 -0
  59. package/dist/esm/processor.d.ts.map +1 -0
  60. package/dist/esm/processor.js +294 -0
  61. package/dist/esm/processor.js.map +1 -0
  62. package/dist/esm/walker.d.ts +97 -0
  63. package/dist/esm/walker.d.ts.map +1 -0
  64. package/dist/esm/walker.js +381 -0
  65. package/dist/esm/walker.js.map +1 -0
  66. package/package.json +119 -0
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Single-use utility classes to provide functionality to the {@link Glob}
3
+ * methods.
4
+ *
5
+ * @module
6
+ */
7
+ import { Minipass } from 'minipass';
8
+ import { Ignore } from './ignore.js';
9
+ import { Processor } from './processor.js';
10
+ const makeIgnore = (ignore, opts) => typeof ignore === 'string' ? new Ignore([ignore], opts)
11
+ : Array.isArray(ignore) ? new Ignore(ignore, opts)
12
+ : ignore;
13
+ /**
14
+ * basic walking utilities that all the glob walker types use
15
+ */
16
+ export class GlobUtil {
17
+ path;
18
+ patterns;
19
+ opts;
20
+ seen = new Set();
21
+ paused = false;
22
+ aborted = false;
23
+ #onResume = [];
24
+ #ignore;
25
+ #sep;
26
+ signal;
27
+ maxDepth;
28
+ includeChildMatches;
29
+ constructor(patterns, path, opts) {
30
+ this.patterns = patterns;
31
+ this.path = path;
32
+ this.opts = opts;
33
+ this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
34
+ this.includeChildMatches = opts.includeChildMatches !== false;
35
+ if (opts.ignore || !this.includeChildMatches) {
36
+ this.#ignore = makeIgnore(opts.ignore ?? [], opts);
37
+ if (!this.includeChildMatches &&
38
+ typeof this.#ignore.add !== 'function') {
39
+ const m = 'cannot ignore child matches, ignore lacks add() method.';
40
+ throw new Error(m);
41
+ }
42
+ }
43
+ // ignore, always set with maxDepth, but it's optional on the
44
+ // GlobOptions type
45
+ /* c8 ignore start */
46
+ this.maxDepth = opts.maxDepth || Infinity;
47
+ /* c8 ignore stop */
48
+ if (opts.signal) {
49
+ this.signal = opts.signal;
50
+ this.signal.addEventListener('abort', () => {
51
+ this.#onResume.length = 0;
52
+ });
53
+ }
54
+ }
55
+ #ignored(path) {
56
+ return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
57
+ }
58
+ #childrenIgnored(path) {
59
+ return !!this.#ignore?.childrenIgnored?.(path);
60
+ }
61
+ // backpressure mechanism
62
+ pause() {
63
+ this.paused = true;
64
+ }
65
+ resume() {
66
+ /* c8 ignore start */
67
+ if (this.signal?.aborted)
68
+ return;
69
+ /* c8 ignore stop */
70
+ this.paused = false;
71
+ let fn = undefined;
72
+ while (!this.paused && (fn = this.#onResume.shift())) {
73
+ fn();
74
+ }
75
+ }
76
+ onResume(fn) {
77
+ if (this.signal?.aborted)
78
+ return;
79
+ /* c8 ignore start */
80
+ if (!this.paused) {
81
+ fn();
82
+ }
83
+ else {
84
+ /* c8 ignore stop */
85
+ this.#onResume.push(fn);
86
+ }
87
+ }
88
+ // do the requisite realpath/stat checking, and return the path
89
+ // to add or undefined to filter it out.
90
+ async matchCheck(e, ifDir) {
91
+ if (ifDir && this.opts.nodir)
92
+ return undefined;
93
+ let rpc;
94
+ if (this.opts.realpath) {
95
+ rpc = e.realpathCached() || (await e.realpath());
96
+ if (!rpc)
97
+ return undefined;
98
+ e = rpc;
99
+ }
100
+ const needStat = e.isUnknown() || this.opts.stat;
101
+ const s = needStat ? await e.lstat() : e;
102
+ if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
103
+ const target = await s.realpath();
104
+ /* c8 ignore start */
105
+ if (target && (target.isUnknown() || this.opts.stat)) {
106
+ await target.lstat();
107
+ }
108
+ /* c8 ignore stop */
109
+ }
110
+ return this.matchCheckTest(s, ifDir);
111
+ }
112
+ matchCheckTest(e, ifDir) {
113
+ return (e &&
114
+ (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&
115
+ (!ifDir || e.canReaddir()) &&
116
+ (!this.opts.nodir || !e.isDirectory()) &&
117
+ (!this.opts.nodir ||
118
+ !this.opts.follow ||
119
+ !e.isSymbolicLink() ||
120
+ !e.realpathCached()?.isDirectory()) &&
121
+ !this.#ignored(e)) ?
122
+ e
123
+ : undefined;
124
+ }
125
+ matchCheckSync(e, ifDir) {
126
+ if (ifDir && this.opts.nodir)
127
+ return undefined;
128
+ let rpc;
129
+ if (this.opts.realpath) {
130
+ rpc = e.realpathCached() || e.realpathSync();
131
+ if (!rpc)
132
+ return undefined;
133
+ e = rpc;
134
+ }
135
+ const needStat = e.isUnknown() || this.opts.stat;
136
+ const s = needStat ? e.lstatSync() : e;
137
+ if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
138
+ const target = s.realpathSync();
139
+ if (target && (target?.isUnknown() || this.opts.stat)) {
140
+ target.lstatSync();
141
+ }
142
+ }
143
+ return this.matchCheckTest(s, ifDir);
144
+ }
145
+ matchFinish(e, absolute) {
146
+ if (this.#ignored(e))
147
+ return;
148
+ // we know we have an ignore if this is false, but TS doesn't
149
+ if (!this.includeChildMatches && this.#ignore?.add) {
150
+ const ign = `${e.relativePosix()}/**`;
151
+ this.#ignore.add(ign);
152
+ }
153
+ const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute;
154
+ this.seen.add(e);
155
+ const mark = this.opts.mark && e.isDirectory() ? this.#sep : '';
156
+ // ok, we have what we need!
157
+ if (this.opts.withFileTypes) {
158
+ this.matchEmit(e);
159
+ }
160
+ else if (abs) {
161
+ const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
162
+ this.matchEmit(abs + mark);
163
+ }
164
+ else {
165
+ const rel = this.opts.posix ? e.relativePosix() : e.relative();
166
+ const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?
167
+ '.' + this.#sep
168
+ : '';
169
+ this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
170
+ }
171
+ }
172
+ async match(e, absolute, ifDir) {
173
+ const p = await this.matchCheck(e, ifDir);
174
+ if (p)
175
+ this.matchFinish(p, absolute);
176
+ }
177
+ matchSync(e, absolute, ifDir) {
178
+ const p = this.matchCheckSync(e, ifDir);
179
+ if (p)
180
+ this.matchFinish(p, absolute);
181
+ }
182
+ walkCB(target, patterns, cb) {
183
+ /* c8 ignore start */
184
+ if (this.signal?.aborted)
185
+ cb();
186
+ /* c8 ignore stop */
187
+ this.walkCB2(target, patterns, new Processor(this.opts), cb);
188
+ }
189
+ walkCB2(target, patterns, processor, cb) {
190
+ if (this.#childrenIgnored(target))
191
+ return cb();
192
+ if (this.signal?.aborted)
193
+ cb();
194
+ if (this.paused) {
195
+ this.onResume(() => this.walkCB2(target, patterns, processor, cb));
196
+ return;
197
+ }
198
+ processor.processPatterns(target, patterns);
199
+ // done processing. all of the above is sync, can be abstracted out.
200
+ // subwalks is a map of paths to the entry filters they need
201
+ // matches is a map of paths to [absolute, ifDir] tuples.
202
+ let tasks = 1;
203
+ const next = () => {
204
+ if (--tasks === 0)
205
+ cb();
206
+ };
207
+ for (const [m, absolute, ifDir] of processor.matches.entries()) {
208
+ if (this.#ignored(m))
209
+ continue;
210
+ tasks++;
211
+ this.match(m, absolute, ifDir).then(() => next());
212
+ }
213
+ for (const t of processor.subwalkTargets()) {
214
+ if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
215
+ continue;
216
+ }
217
+ tasks++;
218
+ const childrenCached = t.readdirCached();
219
+ if (t.calledReaddir())
220
+ this.walkCB3(t, childrenCached, processor, next);
221
+ else {
222
+ t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
223
+ }
224
+ }
225
+ next();
226
+ }
227
+ walkCB3(target, entries, processor, cb) {
228
+ processor = processor.filterEntries(target, entries);
229
+ let tasks = 1;
230
+ const next = () => {
231
+ if (--tasks === 0)
232
+ cb();
233
+ };
234
+ for (const [m, absolute, ifDir] of processor.matches.entries()) {
235
+ if (this.#ignored(m))
236
+ continue;
237
+ tasks++;
238
+ this.match(m, absolute, ifDir).then(() => next());
239
+ }
240
+ for (const [target, patterns] of processor.subwalks.entries()) {
241
+ tasks++;
242
+ this.walkCB2(target, patterns, processor.child(), next);
243
+ }
244
+ next();
245
+ }
246
+ walkCBSync(target, patterns, cb) {
247
+ /* c8 ignore start */
248
+ if (this.signal?.aborted)
249
+ cb();
250
+ /* c8 ignore stop */
251
+ this.walkCB2Sync(target, patterns, new Processor(this.opts), cb);
252
+ }
253
+ walkCB2Sync(target, patterns, processor, cb) {
254
+ if (this.#childrenIgnored(target))
255
+ return cb();
256
+ if (this.signal?.aborted)
257
+ cb();
258
+ if (this.paused) {
259
+ this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
260
+ return;
261
+ }
262
+ processor.processPatterns(target, patterns);
263
+ // done processing. all of the above is sync, can be abstracted out.
264
+ // subwalks is a map of paths to the entry filters they need
265
+ // matches is a map of paths to [absolute, ifDir] tuples.
266
+ let tasks = 1;
267
+ const next = () => {
268
+ if (--tasks === 0)
269
+ cb();
270
+ };
271
+ for (const [m, absolute, ifDir] of processor.matches.entries()) {
272
+ if (this.#ignored(m))
273
+ continue;
274
+ this.matchSync(m, absolute, ifDir);
275
+ }
276
+ for (const t of processor.subwalkTargets()) {
277
+ if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
278
+ continue;
279
+ }
280
+ tasks++;
281
+ const children = t.readdirSync();
282
+ this.walkCB3Sync(t, children, processor, next);
283
+ }
284
+ next();
285
+ }
286
+ walkCB3Sync(target, entries, processor, cb) {
287
+ processor = processor.filterEntries(target, entries);
288
+ let tasks = 1;
289
+ const next = () => {
290
+ if (--tasks === 0)
291
+ cb();
292
+ };
293
+ for (const [m, absolute, ifDir] of processor.matches.entries()) {
294
+ if (this.#ignored(m))
295
+ continue;
296
+ this.matchSync(m, absolute, ifDir);
297
+ }
298
+ for (const [target, patterns] of processor.subwalks.entries()) {
299
+ tasks++;
300
+ this.walkCB2Sync(target, patterns, processor.child(), next);
301
+ }
302
+ next();
303
+ }
304
+ }
305
+ export class GlobWalker extends GlobUtil {
306
+ matches = new Set();
307
+ constructor(patterns, path, opts) {
308
+ super(patterns, path, opts);
309
+ }
310
+ matchEmit(e) {
311
+ this.matches.add(e);
312
+ }
313
+ async walk() {
314
+ if (this.signal?.aborted)
315
+ throw this.signal.reason;
316
+ if (this.path.isUnknown()) {
317
+ await this.path.lstat();
318
+ }
319
+ await new Promise((res, rej) => {
320
+ this.walkCB(this.path, this.patterns, () => {
321
+ if (this.signal?.aborted) {
322
+ rej(this.signal.reason);
323
+ }
324
+ else {
325
+ res(this.matches);
326
+ }
327
+ });
328
+ });
329
+ return this.matches;
330
+ }
331
+ walkSync() {
332
+ if (this.signal?.aborted)
333
+ throw this.signal.reason;
334
+ if (this.path.isUnknown()) {
335
+ this.path.lstatSync();
336
+ }
337
+ // nothing for the callback to do, because this never pauses
338
+ this.walkCBSync(this.path, this.patterns, () => {
339
+ if (this.signal?.aborted)
340
+ throw this.signal.reason;
341
+ });
342
+ return this.matches;
343
+ }
344
+ }
345
+ export class GlobStream extends GlobUtil {
346
+ results;
347
+ constructor(patterns, path, opts) {
348
+ super(patterns, path, opts);
349
+ this.results = new Minipass({
350
+ signal: this.signal,
351
+ objectMode: true,
352
+ });
353
+ this.results.on('drain', () => this.resume());
354
+ this.results.on('resume', () => this.resume());
355
+ }
356
+ matchEmit(e) {
357
+ this.results.write(e);
358
+ if (!this.results.flowing)
359
+ this.pause();
360
+ }
361
+ stream() {
362
+ const target = this.path;
363
+ if (target.isUnknown()) {
364
+ target.lstat().then(() => {
365
+ this.walkCB(target, this.patterns, () => this.results.end());
366
+ });
367
+ }
368
+ else {
369
+ this.walkCB(target, this.patterns, () => this.results.end());
370
+ }
371
+ return this.results;
372
+ }
373
+ streamSync() {
374
+ if (this.path.isUnknown()) {
375
+ this.path.lstatSync();
376
+ }
377
+ this.walkCBSync(this.path, this.patterns, () => this.results.end());
378
+ return this.results;
379
+ }
380
+ }
381
+ //# sourceMappingURL=walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n includeChildMatches?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue ? Path\n : O extends GWOFileTypesFalse ? string\n : O extends GWOFileTypesUnset ? string\n : Path | string\n\nexport type Matches<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue ? Set<Path>\n : O extends GWOFileTypesFalse ? Set<string>\n : O extends GWOFileTypesUnset ? Set<string>\n : Set<Path | string>\n\nexport type MatchStream<O extends GlobWalkerOpts> = Minipass<\n Result<O>,\n Result<O>\n>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts,\n): IgnoreLike =>\n typeof ignore === 'string' ? new Ignore([ignore], opts)\n : Array.isArray(ignore) ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set<Path> = new Set<Path>()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n includeChildMatches: boolean\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n this.includeChildMatches = opts.includeChildMatches !== false\n if (opts.ignore || !this.includeChildMatches) {\n this.#ignore = makeIgnore(opts.ignore ?? [], opts)\n if (\n !this.includeChildMatches &&\n typeof this.#ignore.add !== 'function'\n ) {\n const m = 'cannot ignore child matches, ignore lacks add() method.'\n throw new Error(m)\n }\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined> {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? await e.lstat() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = await s.realpath()\n /* c8 ignore start */\n if (target && (target.isUnknown() || this.opts.stat)) {\n await target.lstat()\n }\n /* c8 ignore stop */\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return (\n e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n (!this.opts.nodir ||\n !this.opts.follow ||\n !e.isSymbolicLink() ||\n !e.realpathCached()?.isDirectory()) &&\n !this.#ignored(e)\n ) ?\n e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? e.lstatSync() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = s.realpathSync()\n if (target && (target?.isUnknown() || this.opts.stat)) {\n target.lstatSync()\n }\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n abstract matchEmit(p: Result<O>): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n // we know we have an ignore if this is false, but TS doesn't\n if (!this.includeChildMatches && this.#ignore?.add) {\n const ign = `${e.relativePosix()}/**`\n this.#ignore.add(ign)\n }\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise<void> {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true,\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb),\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n matches = new Set<Result<O>>()\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n }\n\n matchEmit(e: Result<O>): void {\n this.matches.add(e)\n }\n\n async walk(): Promise<Set<Result<O>>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Set<Result<O>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n results: Minipass<Result<O>, Result<O>>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass<Result<O>, Result<O>>({\n signal: this.signal,\n objectMode: true,\n })\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result<O>): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream<O> {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream<O> {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,119 @@
1
+ {
2
+ "author": "Isaac Z. Schlueter <i@izs.me> (https://blog.izs.me/)",
3
+ "name": "@depup/glob",
4
+ "description": "the most correct and second fastest glob implementation in JavaScript (with updated dependencies)",
5
+ "version": "13.0.6-depup.23",
6
+ "type": "module",
7
+ "tshy": {
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ "./raw": "./src/index.ts",
11
+ ".": {
12
+ "import": {
13
+ "types": "./dist/esm/index.d.ts",
14
+ "default": "./dist/esm/index.min.js"
15
+ },
16
+ "require": {
17
+ "types": "./dist/commonjs/index.d.ts",
18
+ "default": "./dist/commonjs/index.min.js"
19
+ }
20
+ }
21
+ }
22
+ },
23
+ "main": "./dist/commonjs/index.min.js",
24
+ "module": "./dist/esm/index.min.js",
25
+ "types": "./dist/commonjs/index.d.ts",
26
+ "exports": {
27
+ "./package.json": "./package.json",
28
+ "./raw": {
29
+ "import": {
30
+ "types": "./dist/esm/index.d.ts",
31
+ "default": "./dist/esm/index.js"
32
+ },
33
+ "require": {
34
+ "types": "./dist/commonjs/index.d.ts",
35
+ "default": "./dist/commonjs/index.js"
36
+ }
37
+ },
38
+ ".": {
39
+ "import": {
40
+ "types": "./dist/esm/index.d.ts",
41
+ "default": "./dist/esm/index.min.js"
42
+ },
43
+ "require": {
44
+ "types": "./dist/commonjs/index.d.ts",
45
+ "default": "./dist/commonjs/index.min.js"
46
+ }
47
+ }
48
+ },
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git@github.com:isaacs/node-glob.git"
52
+ },
53
+ "files": [
54
+ "dist",
55
+ "changes.json",
56
+ "README.md"
57
+ ],
58
+ "scripts": {
59
+ "preversion": "npm test",
60
+ "postversion": "npm publish",
61
+ "pretest": "npm run prepare",
62
+ "presnap": "npm run prepare",
63
+ "test": "tap",
64
+ "snap": "tap",
65
+ "format": "prettier --write . --log-level warn",
66
+ "typedoc": "typedoc",
67
+ "profclean": "rm -f v8.log profile.txt",
68
+ "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts",
69
+ "prebench": "npm run prepare",
70
+ "bench": "bash benchmark.sh",
71
+ "preprof": "npm run prepare",
72
+ "prof": "bash prof.sh",
73
+ "benchclean": "node benchclean.cjs"
74
+ },
75
+ "dependencies": {
76
+ "minimatch": "^10.2.5",
77
+ "minipass": "^7.1.3",
78
+ "path-scurry": "^2.0.2"
79
+ },
80
+ "devDependencies": {
81
+ "@types/node": "^25.3.0",
82
+ "esbuild": "^0.27.3",
83
+ "memfs": "^4.50.0",
84
+ "mkdirp": "^3.0.1",
85
+ "prettier": "^3.6.2",
86
+ "rimraf": "^6.1.3",
87
+ "tap": "^21.6.1",
88
+ "tshy": "^3.3.2",
89
+ "typedoc": "^0.28.17"
90
+ },
91
+ "license": "BlueOak-1.0.0",
92
+ "funding": {
93
+ "url": "https://github.com/sponsors/isaacs"
94
+ },
95
+ "engines": {
96
+ "node": "18 || 20 || >=22"
97
+ },
98
+ "keywords": [
99
+ "glob",
100
+ "depup",
101
+ "updated-dependencies",
102
+ "security",
103
+ "latest",
104
+ "patched"
105
+ ],
106
+ "depup": {
107
+ "changes": {
108
+ "minimatch": {
109
+ "from": "^10.2.2",
110
+ "to": "^10.2.5"
111
+ }
112
+ },
113
+ "depsUpdated": 1,
114
+ "originalPackage": "glob",
115
+ "originalVersion": "13.0.6",
116
+ "processedAt": "2026-07-21T17:24:45.913Z",
117
+ "smokeTest": "passed"
118
+ }
119
+ }