Comparing version 2.1.2 to 2.2.0
{ | ||
"name": "colleqtor", | ||
"version": "2.1.2", | ||
"version": "2.2.0", | ||
"description": "Seize the directory.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -26,31 +26,74 @@ const { version } = require('../package.json'); | ||
function dirEntriesToFileNames (dirPath, dirEntries, options) { | ||
const { stripDirPath, recursive, useAsync } = options; | ||
const cleanName = p => stripDirPath ? p : path.join(dirPath, p); | ||
const entries = dirEntries.filter(e => e.isFile() || e.isDirectory()); | ||
return !useAsync | ||
? entries.reduce(function (output, dirEntry) { | ||
if (dirEntry.isFile()) | ||
return [ ...output, cleanName(dirEntry.name) ]; | ||
else if (dirEntry.isDirectory() && recursive) { | ||
const subDirPath = path.join(dirPath, dirEntry.name); | ||
return [ ...output, ...listFiles(subDirPath, options) ]; | ||
} else return output; | ||
}, []) | ||
: new Promise((resolve, reject) => { | ||
const output = []; | ||
let finishedCount = 0; | ||
try { | ||
entries.forEach((dirEntry, index) => { | ||
const finish = () => ++finishedCount === entries.length ? resolve(output) : null; | ||
if (dirEntry.isFile()) { | ||
output.push(cleanName(dirEntry.name)); | ||
finish(); | ||
} else if (dirEntry.isDirectory() && recursive) { | ||
const subDirPath = path.join(dirPath, dirEntry.name); | ||
listFiles(subDirPath, options) | ||
.then(list => { | ||
list.forEach(item => output.push(item)); | ||
finish(); | ||
}, reject); | ||
} else { | ||
finish(); | ||
} | ||
}); | ||
} catch (e) { | ||
reject(e); | ||
} | ||
}); | ||
} | ||
function listFiles (dir, options = {}) { | ||
checkOptions('listFiles', options); | ||
const { | ||
extension = null, | ||
stripDirPath = null, | ||
recursive = null, | ||
exclude = null | ||
} = options; | ||
const { useAsync, extension, exclude } = options; | ||
const cleanName = p => stripDirPath ? p : path.join(dir, p); | ||
const dirContents = fs.readdirSync(dir, { withFileTypes: true }); | ||
const fileNames = dirContents.reduce(function (output, dirItem) { | ||
if (dirItem.isFile()) | ||
return [ | ||
...output, | ||
cleanName(dirItem.name) | ||
]; | ||
else if (dirItem.isDirectory() && recursive) | ||
return [ | ||
...output, | ||
...listFiles(path.join(dir, dirItem.name), { extension, stripDirPath, recursive }) | ||
]; | ||
else return output; | ||
}, []); | ||
if (!useAsync) { | ||
const files = fs.readdirSync(dir, { withFileTypes: true }); | ||
const fileNames = dirEntriesToFileNames(dir, files, options); | ||
return fileNames | ||
.filter(extensionFilter(extension)) | ||
.filter(exclusionFilter(exclude)); | ||
return fileNames | ||
.filter(extensionFilter(extension)) | ||
.filter(exclusionFilter(exclude)); | ||
} | ||
return new Promise((resolve, reject) => { | ||
fs.readdir(dir, { withFileTypes: true }, (err, files) => { | ||
if (err) return reject(err); | ||
dirEntriesToFileNames(dir, files, options) | ||
.then(fileNames => { | ||
const filteredFilenames = fileNames | ||
.filter(extensionFilter(extension)) | ||
.filter(exclusionFilter(exclude)); | ||
resolve(filteredFilenames); | ||
}, reject); | ||
}); | ||
}); | ||
}; | ||
@@ -57,0 +100,0 @@ |
@@ -7,2 +7,3 @@ const zaq = require('zaq'); | ||
zaq.ok('LIST FILES: Only dir provided:', colleqtor.listFiles(testDir)); | ||
@@ -16,1 +17,3 @@ zaq.ok('lsitFiles: Dir and extension (log) provided:', colleqtor.listFiles(testDir, { extension: 'log' })); | ||
zaq.ok('getFileContent(listFiles(testDir, \'txt\'))', colleqtor.getFileContents(colleqtor.listFiles(testDir, { extension: 'txt' }))); | ||
colleqtor.listFiles(testDir, { extension: 'txt', useAsync: true }) | ||
.then(list => zaq.ok('listFiles with { useAsync: true }', list)); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
15377
194
0