'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.readdir = exports.readdirWithFileTypes = exports.read = void 0;
const fsStat = require('@nodelib/fs.stat');
const constants_1 = require('../constants');
const utils = require('../utils');
const common = require('./common');
function read(directory, settings) {
  if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
    return readdirWithFileTypes(directory, settings);
  }
  return readdir(directory, settings);
}
exports.read = read;
function readdirWithFileTypes(directory, settings) {
  const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
  return dirents.map((dirent) => {
    const entry = {
      dirent,
      name: dirent.name,
      path: common.joinPathSegments(
        directory,
        dirent.name,
        settings.pathSegmentSeparator
      ),
    };
    if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
      try {
        const stats = settings.fs.statSync(entry.path);
        entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
      } catch (error) {
        if (settings.throwErrorOnBrokenSymbolicLink) {
          throw error;
        }
      }
    }
    return entry;
  });
}
exports.readdirWithFileTypes = readdirWithFileTypes;
function readdir(directory, settings) {
  const names = settings.fs.readdirSync(directory);
  return names.map((name) => {
    const entryPath = common.joinPathSegments(
      directory,
      name,
      settings.pathSegmentSeparator
    );
    const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
    const entry = {
      name,
      path: entryPath,
      dirent: utils.fs.createDirentFromStats(name, stats),
    };
    if (settings.stats) {
      entry.stats = stats;
    }
    return entry;
  });
}
exports.readdir = readdir;