fix: handle withFileTypes options in readdir
This commit is contained in:
parent
594ab2621f
commit
576831370f
|
@ -0,0 +1,12 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Stats = require('./stats.js');
|
||||||
|
|
||||||
|
function Dirent(path, fileNode, devName) {
|
||||||
|
this.constructor = Dirent;
|
||||||
|
Stats.call(this, path, fileNode, devName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dirent.prototype = Stats.prototype;
|
||||||
|
|
||||||
|
module.exports = Dirent;
|
|
@ -4,6 +4,7 @@ var dirname = Path.dirname;
|
||||||
var basename = Path.basename;
|
var basename = Path.basename;
|
||||||
var isAbsolutePath = Path.isAbsolute;
|
var isAbsolutePath = Path.isAbsolute;
|
||||||
var shared = require('../shared.js');
|
var shared = require('../shared.js');
|
||||||
|
var async = require('../../lib/async.js');
|
||||||
|
|
||||||
var Constants = require('../constants.js');
|
var Constants = require('../constants.js');
|
||||||
var NODE_TYPE_FILE = Constants.NODE_TYPE_FILE;
|
var NODE_TYPE_FILE = Constants.NODE_TYPE_FILE;
|
||||||
|
@ -35,6 +36,7 @@ var openFiles = require('../open-files.js');
|
||||||
var OpenFileDescription = require('../open-file-description.js');
|
var OpenFileDescription = require('../open-file-description.js');
|
||||||
var SuperNode = require('../super-node.js');
|
var SuperNode = require('../super-node.js');
|
||||||
var Node = require('../node.js');
|
var Node = require('../node.js');
|
||||||
|
var Dirent = require('../dirent.js');
|
||||||
var Stats = require('../stats.js');
|
var Stats = require('../stats.js');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1155,11 +1157,30 @@ function read_directory(context, path, options, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.withFileTypes) {
|
if (options.withFileTypes) {
|
||||||
// TODO: map files to fs.Dirent
|
var dirEnts = [];
|
||||||
return callback(new Error('readdir does not support option withFileTypes yet'));
|
|
||||||
|
// eslint-disable-next-line no-inner-declarations
|
||||||
|
function to_dir_entry(file, callback) {
|
||||||
|
const filename = Buffer.from(file, options.encoding).toString();
|
||||||
|
const filepath = Path.join(path, filename);
|
||||||
|
get_dir_entry(context, filepath, function(error, dirEnt) {
|
||||||
|
if (error) {
|
||||||
|
callback(error);
|
||||||
|
}
|
||||||
|
dirEnt.name = file;
|
||||||
|
dirEnts.push(dirEnt);
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async.eachSeries(files, to_dir_entry, function (error) {
|
||||||
|
callback(error, dirEnts);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, files);
|
else {
|
||||||
|
callback(null, files);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1177,6 +1198,19 @@ function read_directory(context, path, options, callback) {
|
||||||
find_node(context, path, read_directory_data);
|
find_node(context, path, read_directory_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_dir_entry(context, path, callback) {
|
||||||
|
function check_result(error, result) {
|
||||||
|
if(error) {
|
||||||
|
callback(error);
|
||||||
|
} else {
|
||||||
|
var stats = new Dirent(path, result, context.name);
|
||||||
|
callback(null, stats);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lstat_file(context, path, check_result);
|
||||||
|
}
|
||||||
|
|
||||||
function validate_directory_options(options, enc) {
|
function validate_directory_options(options, enc) {
|
||||||
if (!options) {
|
if (!options) {
|
||||||
options = { encoding: enc };
|
options = { encoding: enc };
|
||||||
|
|
Loading…
Reference in New Issue