@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.
- package/LICENSE.md +63 -0
- package/README.md +31 -0
- package/changes.json +10 -0
- package/dist/commonjs/glob.d.ts +396 -0
- package/dist/commonjs/glob.d.ts.map +1 -0
- package/dist/commonjs/glob.js +248 -0
- package/dist/commonjs/glob.js.map +1 -0
- package/dist/commonjs/has-magic.d.ts +14 -0
- package/dist/commonjs/has-magic.d.ts.map +1 -0
- package/dist/commonjs/has-magic.js +27 -0
- package/dist/commonjs/has-magic.js.map +1 -0
- package/dist/commonjs/ignore.d.ts +24 -0
- package/dist/commonjs/ignore.d.ts.map +1 -0
- package/dist/commonjs/ignore.js +119 -0
- package/dist/commonjs/ignore.js.map +1 -0
- package/dist/commonjs/index.d.ts +97 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +68 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/index.min.js +4 -0
- package/dist/commonjs/index.min.js.map +7 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/pattern.d.ts +79 -0
- package/dist/commonjs/pattern.d.ts.map +1 -0
- package/dist/commonjs/pattern.js +223 -0
- package/dist/commonjs/pattern.js.map +1 -0
- package/dist/commonjs/processor.d.ts +59 -0
- package/dist/commonjs/processor.d.ts.map +1 -0
- package/dist/commonjs/processor.js +301 -0
- package/dist/commonjs/processor.js.map +1 -0
- package/dist/commonjs/walker.d.ts +97 -0
- package/dist/commonjs/walker.d.ts.map +1 -0
- package/dist/commonjs/walker.js +387 -0
- package/dist/commonjs/walker.js.map +1 -0
- package/dist/esm/glob.d.ts +396 -0
- package/dist/esm/glob.d.ts.map +1 -0
- package/dist/esm/glob.js +244 -0
- package/dist/esm/glob.js.map +1 -0
- package/dist/esm/has-magic.d.ts +14 -0
- package/dist/esm/has-magic.d.ts.map +1 -0
- package/dist/esm/has-magic.js +23 -0
- package/dist/esm/has-magic.js.map +1 -0
- package/dist/esm/ignore.d.ts +24 -0
- package/dist/esm/ignore.d.ts.map +1 -0
- package/dist/esm/ignore.js +115 -0
- package/dist/esm/ignore.js.map +1 -0
- package/dist/esm/index.d.ts +97 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +55 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.min.js +4 -0
- package/dist/esm/index.min.js.map +7 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/pattern.d.ts +79 -0
- package/dist/esm/pattern.d.ts.map +1 -0
- package/dist/esm/pattern.js +219 -0
- package/dist/esm/pattern.js.map +1 -0
- package/dist/esm/processor.d.ts +59 -0
- package/dist/esm/processor.d.ts.map +1 -0
- package/dist/esm/processor.js +294 -0
- package/dist/esm/processor.js.map +1 -0
- package/dist/esm/walker.d.ts +97 -0
- package/dist/esm/walker.d.ts.map +1 -0
- package/dist/esm/walker.js +381 -0
- package/dist/esm/walker.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Single-use utility classes to provide functionality to the {@link Glob}
|
|
6
|
+
* methods.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
const minipass_1 = require("minipass");
|
|
11
|
+
const ignore_js_1 = require("./ignore.js");
|
|
12
|
+
const processor_js_1 = require("./processor.js");
|
|
13
|
+
const makeIgnore = (ignore, opts) => typeof ignore === 'string' ? new ignore_js_1.Ignore([ignore], opts)
|
|
14
|
+
: Array.isArray(ignore) ? new ignore_js_1.Ignore(ignore, opts)
|
|
15
|
+
: ignore;
|
|
16
|
+
/**
|
|
17
|
+
* basic walking utilities that all the glob walker types use
|
|
18
|
+
*/
|
|
19
|
+
class GlobUtil {
|
|
20
|
+
path;
|
|
21
|
+
patterns;
|
|
22
|
+
opts;
|
|
23
|
+
seen = new Set();
|
|
24
|
+
paused = false;
|
|
25
|
+
aborted = false;
|
|
26
|
+
#onResume = [];
|
|
27
|
+
#ignore;
|
|
28
|
+
#sep;
|
|
29
|
+
signal;
|
|
30
|
+
maxDepth;
|
|
31
|
+
includeChildMatches;
|
|
32
|
+
constructor(patterns, path, opts) {
|
|
33
|
+
this.patterns = patterns;
|
|
34
|
+
this.path = path;
|
|
35
|
+
this.opts = opts;
|
|
36
|
+
this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
|
|
37
|
+
this.includeChildMatches = opts.includeChildMatches !== false;
|
|
38
|
+
if (opts.ignore || !this.includeChildMatches) {
|
|
39
|
+
this.#ignore = makeIgnore(opts.ignore ?? [], opts);
|
|
40
|
+
if (!this.includeChildMatches &&
|
|
41
|
+
typeof this.#ignore.add !== 'function') {
|
|
42
|
+
const m = 'cannot ignore child matches, ignore lacks add() method.';
|
|
43
|
+
throw new Error(m);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// ignore, always set with maxDepth, but it's optional on the
|
|
47
|
+
// GlobOptions type
|
|
48
|
+
/* c8 ignore start */
|
|
49
|
+
this.maxDepth = opts.maxDepth || Infinity;
|
|
50
|
+
/* c8 ignore stop */
|
|
51
|
+
if (opts.signal) {
|
|
52
|
+
this.signal = opts.signal;
|
|
53
|
+
this.signal.addEventListener('abort', () => {
|
|
54
|
+
this.#onResume.length = 0;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
#ignored(path) {
|
|
59
|
+
return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
|
|
60
|
+
}
|
|
61
|
+
#childrenIgnored(path) {
|
|
62
|
+
return !!this.#ignore?.childrenIgnored?.(path);
|
|
63
|
+
}
|
|
64
|
+
// backpressure mechanism
|
|
65
|
+
pause() {
|
|
66
|
+
this.paused = true;
|
|
67
|
+
}
|
|
68
|
+
resume() {
|
|
69
|
+
/* c8 ignore start */
|
|
70
|
+
if (this.signal?.aborted)
|
|
71
|
+
return;
|
|
72
|
+
/* c8 ignore stop */
|
|
73
|
+
this.paused = false;
|
|
74
|
+
let fn = undefined;
|
|
75
|
+
while (!this.paused && (fn = this.#onResume.shift())) {
|
|
76
|
+
fn();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
onResume(fn) {
|
|
80
|
+
if (this.signal?.aborted)
|
|
81
|
+
return;
|
|
82
|
+
/* c8 ignore start */
|
|
83
|
+
if (!this.paused) {
|
|
84
|
+
fn();
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
/* c8 ignore stop */
|
|
88
|
+
this.#onResume.push(fn);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// do the requisite realpath/stat checking, and return the path
|
|
92
|
+
// to add or undefined to filter it out.
|
|
93
|
+
async matchCheck(e, ifDir) {
|
|
94
|
+
if (ifDir && this.opts.nodir)
|
|
95
|
+
return undefined;
|
|
96
|
+
let rpc;
|
|
97
|
+
if (this.opts.realpath) {
|
|
98
|
+
rpc = e.realpathCached() || (await e.realpath());
|
|
99
|
+
if (!rpc)
|
|
100
|
+
return undefined;
|
|
101
|
+
e = rpc;
|
|
102
|
+
}
|
|
103
|
+
const needStat = e.isUnknown() || this.opts.stat;
|
|
104
|
+
const s = needStat ? await e.lstat() : e;
|
|
105
|
+
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
|
106
|
+
const target = await s.realpath();
|
|
107
|
+
/* c8 ignore start */
|
|
108
|
+
if (target && (target.isUnknown() || this.opts.stat)) {
|
|
109
|
+
await target.lstat();
|
|
110
|
+
}
|
|
111
|
+
/* c8 ignore stop */
|
|
112
|
+
}
|
|
113
|
+
return this.matchCheckTest(s, ifDir);
|
|
114
|
+
}
|
|
115
|
+
matchCheckTest(e, ifDir) {
|
|
116
|
+
return (e &&
|
|
117
|
+
(this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&
|
|
118
|
+
(!ifDir || e.canReaddir()) &&
|
|
119
|
+
(!this.opts.nodir || !e.isDirectory()) &&
|
|
120
|
+
(!this.opts.nodir ||
|
|
121
|
+
!this.opts.follow ||
|
|
122
|
+
!e.isSymbolicLink() ||
|
|
123
|
+
!e.realpathCached()?.isDirectory()) &&
|
|
124
|
+
!this.#ignored(e)) ?
|
|
125
|
+
e
|
|
126
|
+
: undefined;
|
|
127
|
+
}
|
|
128
|
+
matchCheckSync(e, ifDir) {
|
|
129
|
+
if (ifDir && this.opts.nodir)
|
|
130
|
+
return undefined;
|
|
131
|
+
let rpc;
|
|
132
|
+
if (this.opts.realpath) {
|
|
133
|
+
rpc = e.realpathCached() || e.realpathSync();
|
|
134
|
+
if (!rpc)
|
|
135
|
+
return undefined;
|
|
136
|
+
e = rpc;
|
|
137
|
+
}
|
|
138
|
+
const needStat = e.isUnknown() || this.opts.stat;
|
|
139
|
+
const s = needStat ? e.lstatSync() : e;
|
|
140
|
+
if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
|
|
141
|
+
const target = s.realpathSync();
|
|
142
|
+
if (target && (target?.isUnknown() || this.opts.stat)) {
|
|
143
|
+
target.lstatSync();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return this.matchCheckTest(s, ifDir);
|
|
147
|
+
}
|
|
148
|
+
matchFinish(e, absolute) {
|
|
149
|
+
if (this.#ignored(e))
|
|
150
|
+
return;
|
|
151
|
+
// we know we have an ignore if this is false, but TS doesn't
|
|
152
|
+
if (!this.includeChildMatches && this.#ignore?.add) {
|
|
153
|
+
const ign = `${e.relativePosix()}/**`;
|
|
154
|
+
this.#ignore.add(ign);
|
|
155
|
+
}
|
|
156
|
+
const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute;
|
|
157
|
+
this.seen.add(e);
|
|
158
|
+
const mark = this.opts.mark && e.isDirectory() ? this.#sep : '';
|
|
159
|
+
// ok, we have what we need!
|
|
160
|
+
if (this.opts.withFileTypes) {
|
|
161
|
+
this.matchEmit(e);
|
|
162
|
+
}
|
|
163
|
+
else if (abs) {
|
|
164
|
+
const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
|
|
165
|
+
this.matchEmit(abs + mark);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const rel = this.opts.posix ? e.relativePosix() : e.relative();
|
|
169
|
+
const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?
|
|
170
|
+
'.' + this.#sep
|
|
171
|
+
: '';
|
|
172
|
+
this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async match(e, absolute, ifDir) {
|
|
176
|
+
const p = await this.matchCheck(e, ifDir);
|
|
177
|
+
if (p)
|
|
178
|
+
this.matchFinish(p, absolute);
|
|
179
|
+
}
|
|
180
|
+
matchSync(e, absolute, ifDir) {
|
|
181
|
+
const p = this.matchCheckSync(e, ifDir);
|
|
182
|
+
if (p)
|
|
183
|
+
this.matchFinish(p, absolute);
|
|
184
|
+
}
|
|
185
|
+
walkCB(target, patterns, cb) {
|
|
186
|
+
/* c8 ignore start */
|
|
187
|
+
if (this.signal?.aborted)
|
|
188
|
+
cb();
|
|
189
|
+
/* c8 ignore stop */
|
|
190
|
+
this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb);
|
|
191
|
+
}
|
|
192
|
+
walkCB2(target, patterns, processor, cb) {
|
|
193
|
+
if (this.#childrenIgnored(target))
|
|
194
|
+
return cb();
|
|
195
|
+
if (this.signal?.aborted)
|
|
196
|
+
cb();
|
|
197
|
+
if (this.paused) {
|
|
198
|
+
this.onResume(() => this.walkCB2(target, patterns, processor, cb));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
processor.processPatterns(target, patterns);
|
|
202
|
+
// done processing. all of the above is sync, can be abstracted out.
|
|
203
|
+
// subwalks is a map of paths to the entry filters they need
|
|
204
|
+
// matches is a map of paths to [absolute, ifDir] tuples.
|
|
205
|
+
let tasks = 1;
|
|
206
|
+
const next = () => {
|
|
207
|
+
if (--tasks === 0)
|
|
208
|
+
cb();
|
|
209
|
+
};
|
|
210
|
+
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
|
211
|
+
if (this.#ignored(m))
|
|
212
|
+
continue;
|
|
213
|
+
tasks++;
|
|
214
|
+
this.match(m, absolute, ifDir).then(() => next());
|
|
215
|
+
}
|
|
216
|
+
for (const t of processor.subwalkTargets()) {
|
|
217
|
+
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
tasks++;
|
|
221
|
+
const childrenCached = t.readdirCached();
|
|
222
|
+
if (t.calledReaddir())
|
|
223
|
+
this.walkCB3(t, childrenCached, processor, next);
|
|
224
|
+
else {
|
|
225
|
+
t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
next();
|
|
229
|
+
}
|
|
230
|
+
walkCB3(target, entries, processor, cb) {
|
|
231
|
+
processor = processor.filterEntries(target, entries);
|
|
232
|
+
let tasks = 1;
|
|
233
|
+
const next = () => {
|
|
234
|
+
if (--tasks === 0)
|
|
235
|
+
cb();
|
|
236
|
+
};
|
|
237
|
+
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
|
238
|
+
if (this.#ignored(m))
|
|
239
|
+
continue;
|
|
240
|
+
tasks++;
|
|
241
|
+
this.match(m, absolute, ifDir).then(() => next());
|
|
242
|
+
}
|
|
243
|
+
for (const [target, patterns] of processor.subwalks.entries()) {
|
|
244
|
+
tasks++;
|
|
245
|
+
this.walkCB2(target, patterns, processor.child(), next);
|
|
246
|
+
}
|
|
247
|
+
next();
|
|
248
|
+
}
|
|
249
|
+
walkCBSync(target, patterns, cb) {
|
|
250
|
+
/* c8 ignore start */
|
|
251
|
+
if (this.signal?.aborted)
|
|
252
|
+
cb();
|
|
253
|
+
/* c8 ignore stop */
|
|
254
|
+
this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb);
|
|
255
|
+
}
|
|
256
|
+
walkCB2Sync(target, patterns, processor, cb) {
|
|
257
|
+
if (this.#childrenIgnored(target))
|
|
258
|
+
return cb();
|
|
259
|
+
if (this.signal?.aborted)
|
|
260
|
+
cb();
|
|
261
|
+
if (this.paused) {
|
|
262
|
+
this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
processor.processPatterns(target, patterns);
|
|
266
|
+
// done processing. all of the above is sync, can be abstracted out.
|
|
267
|
+
// subwalks is a map of paths to the entry filters they need
|
|
268
|
+
// matches is a map of paths to [absolute, ifDir] tuples.
|
|
269
|
+
let tasks = 1;
|
|
270
|
+
const next = () => {
|
|
271
|
+
if (--tasks === 0)
|
|
272
|
+
cb();
|
|
273
|
+
};
|
|
274
|
+
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
|
275
|
+
if (this.#ignored(m))
|
|
276
|
+
continue;
|
|
277
|
+
this.matchSync(m, absolute, ifDir);
|
|
278
|
+
}
|
|
279
|
+
for (const t of processor.subwalkTargets()) {
|
|
280
|
+
if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
tasks++;
|
|
284
|
+
const children = t.readdirSync();
|
|
285
|
+
this.walkCB3Sync(t, children, processor, next);
|
|
286
|
+
}
|
|
287
|
+
next();
|
|
288
|
+
}
|
|
289
|
+
walkCB3Sync(target, entries, processor, cb) {
|
|
290
|
+
processor = processor.filterEntries(target, entries);
|
|
291
|
+
let tasks = 1;
|
|
292
|
+
const next = () => {
|
|
293
|
+
if (--tasks === 0)
|
|
294
|
+
cb();
|
|
295
|
+
};
|
|
296
|
+
for (const [m, absolute, ifDir] of processor.matches.entries()) {
|
|
297
|
+
if (this.#ignored(m))
|
|
298
|
+
continue;
|
|
299
|
+
this.matchSync(m, absolute, ifDir);
|
|
300
|
+
}
|
|
301
|
+
for (const [target, patterns] of processor.subwalks.entries()) {
|
|
302
|
+
tasks++;
|
|
303
|
+
this.walkCB2Sync(target, patterns, processor.child(), next);
|
|
304
|
+
}
|
|
305
|
+
next();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
exports.GlobUtil = GlobUtil;
|
|
309
|
+
class GlobWalker extends GlobUtil {
|
|
310
|
+
matches = new Set();
|
|
311
|
+
constructor(patterns, path, opts) {
|
|
312
|
+
super(patterns, path, opts);
|
|
313
|
+
}
|
|
314
|
+
matchEmit(e) {
|
|
315
|
+
this.matches.add(e);
|
|
316
|
+
}
|
|
317
|
+
async walk() {
|
|
318
|
+
if (this.signal?.aborted)
|
|
319
|
+
throw this.signal.reason;
|
|
320
|
+
if (this.path.isUnknown()) {
|
|
321
|
+
await this.path.lstat();
|
|
322
|
+
}
|
|
323
|
+
await new Promise((res, rej) => {
|
|
324
|
+
this.walkCB(this.path, this.patterns, () => {
|
|
325
|
+
if (this.signal?.aborted) {
|
|
326
|
+
rej(this.signal.reason);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
res(this.matches);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
return this.matches;
|
|
334
|
+
}
|
|
335
|
+
walkSync() {
|
|
336
|
+
if (this.signal?.aborted)
|
|
337
|
+
throw this.signal.reason;
|
|
338
|
+
if (this.path.isUnknown()) {
|
|
339
|
+
this.path.lstatSync();
|
|
340
|
+
}
|
|
341
|
+
// nothing for the callback to do, because this never pauses
|
|
342
|
+
this.walkCBSync(this.path, this.patterns, () => {
|
|
343
|
+
if (this.signal?.aborted)
|
|
344
|
+
throw this.signal.reason;
|
|
345
|
+
});
|
|
346
|
+
return this.matches;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.GlobWalker = GlobWalker;
|
|
350
|
+
class GlobStream extends GlobUtil {
|
|
351
|
+
results;
|
|
352
|
+
constructor(patterns, path, opts) {
|
|
353
|
+
super(patterns, path, opts);
|
|
354
|
+
this.results = new minipass_1.Minipass({
|
|
355
|
+
signal: this.signal,
|
|
356
|
+
objectMode: true,
|
|
357
|
+
});
|
|
358
|
+
this.results.on('drain', () => this.resume());
|
|
359
|
+
this.results.on('resume', () => this.resume());
|
|
360
|
+
}
|
|
361
|
+
matchEmit(e) {
|
|
362
|
+
this.results.write(e);
|
|
363
|
+
if (!this.results.flowing)
|
|
364
|
+
this.pause();
|
|
365
|
+
}
|
|
366
|
+
stream() {
|
|
367
|
+
const target = this.path;
|
|
368
|
+
if (target.isUnknown()) {
|
|
369
|
+
target.lstat().then(() => {
|
|
370
|
+
this.walkCB(target, this.patterns, () => this.results.end());
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
this.walkCB(target, this.patterns, () => this.results.end());
|
|
375
|
+
}
|
|
376
|
+
return this.results;
|
|
377
|
+
}
|
|
378
|
+
streamSync() {
|
|
379
|
+
if (this.path.isUnknown()) {
|
|
380
|
+
this.path.lstatSync();
|
|
381
|
+
}
|
|
382
|
+
this.walkCBSync(this.path, this.patterns, () => this.results.end());
|
|
383
|
+
return this.results;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.GlobStream = GlobStream;
|
|
387
|
+
//# 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"]}
|