Spaces:
Running
Running
; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
const stream_1 = require("stream"); | |
const fsStat = require("@nodelib/fs.stat"); | |
const fsWalk = require("@nodelib/fs.walk"); | |
const reader_1 = require("./reader"); | |
class ReaderStream extends reader_1.default { | |
constructor() { | |
super(...arguments); | |
this._walkStream = fsWalk.walkStream; | |
this._stat = fsStat.stat; | |
} | |
dynamic(root, options) { | |
return this._walkStream(root, options); | |
} | |
static(patterns, options) { | |
const filepaths = patterns.map(this._getFullEntryPath, this); | |
const stream = new stream_1.PassThrough({ objectMode: true }); | |
stream._write = (index, _enc, done) => { | |
return this._getEntry(filepaths[index], patterns[index], options) | |
.then((entry) => { | |
if (entry !== null && options.entryFilter(entry)) { | |
stream.push(entry); | |
} | |
if (index === filepaths.length - 1) { | |
stream.end(); | |
} | |
done(); | |
}) | |
.catch(done); | |
}; | |
for (let i = 0; i < filepaths.length; i++) { | |
stream.write(i); | |
} | |
return stream; | |
} | |
_getEntry(filepath, pattern, options) { | |
return this._getStat(filepath) | |
.then((stats) => this._makeEntry(stats, pattern)) | |
.catch((error) => { | |
if (options.errorFilter(error)) { | |
return null; | |
} | |
throw error; | |
}); | |
} | |
_getStat(filepath) { | |
return new Promise((resolve, reject) => { | |
this._stat(filepath, this._fsStatSettings, (error, stats) => { | |
return error === null ? resolve(stats) : reject(error); | |
}); | |
}); | |
} | |
} | |
exports.default = ReaderStream; | |