| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| const fsScandir = require("@nodelib/fs.scandir"); |
| const common = require("./common"); |
| const reader_1 = require("./reader"); |
| class SyncReader extends reader_1.default { |
| constructor() { |
| super(...arguments); |
| this._scandir = fsScandir.scandirSync; |
| this._storage = []; |
| this._queue = new Set(); |
| } |
| read() { |
| this._pushToQueue(this._root, this._settings.basePath); |
| this._handleQueue(); |
| return this._storage; |
| } |
| _pushToQueue(directory, base) { |
| this._queue.add({ directory, base }); |
| } |
| _handleQueue() { |
| for (const item of this._queue.values()) { |
| this._handleDirectory(item.directory, item.base); |
| } |
| } |
| _handleDirectory(directory, base) { |
| try { |
| const entries = this._scandir(directory, this._settings.fsScandirSettings); |
| for (const entry of entries) { |
| this._handleEntry(entry, base); |
| } |
| } |
| catch (error) { |
| this._handleError(error); |
| } |
| } |
| _handleError(error) { |
| if (!common.isFatalError(this._settings, error)) { |
| return; |
| } |
| throw error; |
| } |
| _handleEntry(entry, base) { |
| const fullpath = entry.path; |
| if (base !== undefined) { |
| entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); |
| } |
| if (common.isAppliedFilter(this._settings.entryFilter, entry)) { |
| this._pushToStorage(entry); |
| } |
| if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { |
| this._pushToQueue(fullpath, base === undefined ? undefined : entry.path); |
| } |
| } |
| _pushToStorage(entry) { |
| this._storage.push(entry); |
| } |
| } |
| exports.default = SyncReader; |