You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.9 KiB
59 lines
1.9 KiB
"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;
|
|
|