fix: handle null/undefined options for fs.readdir (#34764)
This commit is contained in:
parent
1c9e7687f9
commit
168726a052
2 changed files with 29 additions and 3 deletions
|
@ -623,11 +623,11 @@ export const wrapFsWithAsar = (fs: Record<string, any>) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const { readdir } = fs;
|
const { readdir } = fs;
|
||||||
fs.readdir = function (pathArgument: string, options: { encoding?: string | null; withFileTypes?: boolean } = {}, callback?: Function) {
|
fs.readdir = function (pathArgument: string, options?: { encoding?: string | null; withFileTypes?: boolean } | null, callback?: Function) {
|
||||||
const pathInfo = splitPath(pathArgument);
|
const pathInfo = splitPath(pathArgument);
|
||||||
if (typeof options === 'function') {
|
if (typeof options === 'function') {
|
||||||
callback = options;
|
callback = options;
|
||||||
options = {};
|
options = undefined;
|
||||||
}
|
}
|
||||||
if (!pathInfo.isAsar) return readdir.apply(this, arguments);
|
if (!pathInfo.isAsar) return readdir.apply(this, arguments);
|
||||||
const { asarPath, filePath } = pathInfo;
|
const { asarPath, filePath } = pathInfo;
|
||||||
|
@ -646,7 +646,7 @@ export const wrapFsWithAsar = (fs: Record<string, any>) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.withFileTypes) {
|
if (options?.withFileTypes) {
|
||||||
const dirents = [];
|
const dirents = [];
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const childPath = path.join(filePath, file);
|
const childPath = path.join(filePath, file);
|
||||||
|
|
|
@ -965,6 +965,32 @@ describe('asar package', function () {
|
||||||
const err = await new Promise<any>(resolve => fs.readdir(p, resolve));
|
const err = await new Promise<any>(resolve => fs.readdir(p, resolve));
|
||||||
expect(err.code).to.equal('ENOENT');
|
expect(err.code).to.equal('ENOENT');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('handles null for options', function (done) {
|
||||||
|
const p = path.join(asarDir, 'a.asar', 'dir1');
|
||||||
|
fs.readdir(p, null, function (err, dirs) {
|
||||||
|
try {
|
||||||
|
expect(err).to.be.null();
|
||||||
|
expect(dirs).to.deep.equal(['file1', 'file2', 'file3', 'link1', 'link2']);
|
||||||
|
done();
|
||||||
|
} catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles undefined for options', function (done) {
|
||||||
|
const p = path.join(asarDir, 'a.asar', 'dir1');
|
||||||
|
fs.readdir(p, undefined, function (err, dirs) {
|
||||||
|
try {
|
||||||
|
expect(err).to.be.null();
|
||||||
|
expect(dirs).to.deep.equal(['file1', 'file2', 'file3', 'link1', 'link2']);
|
||||||
|
done();
|
||||||
|
} catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('fs.promises.readdir', function () {
|
describe('fs.promises.readdir', function () {
|
||||||
|
|
Loading…
Reference in a new issue