Comparing version 2.2.0 to 2.2.1
{ | ||
"name": "colleqtor", | ||
"version": "2.2.0", | ||
"version": "2.2.1", | ||
"description": "Seize the directory.", | ||
"main": "index.js", | ||
"scripts": {}, | ||
"scripts": { | ||
"test": "node test.js" | ||
}, | ||
"repository": { | ||
@@ -29,3 +31,6 @@ "type": "git", | ||
"zaq": "^2.1.3" | ||
}, | ||
"devDependencies": { | ||
"chalk": "^2.4.2" | ||
} | ||
} |
@@ -26,15 +26,25 @@ const { version } = require('../package.json'); | ||
function dirEntriesToFileNames (dirPath, dirEntries, options) { | ||
const { stripDirPath, recursive, useAsync } = options; | ||
const cleanName = p => stripDirPath ? p : path.join(dirPath, p); | ||
function dirEntriesToFileNames (dirPath, dirEntries, options = {}) { | ||
const cleanName = (p, isDir) => (options.stripDirPath | ||
? (p === dirPath ? '' : p) | ||
: (p === dirPath ? p : path.join(dirPath, p))) + (isDir ? path.sep : ''); | ||
const entries = dirEntries.filter(e => e.isFile() || e.isDirectory()); | ||
return !useAsync | ||
return !options.useAsync | ||
? entries.reduce(function (output, dirEntry) { | ||
if (dirEntry.isFile()) | ||
return [ ...output, cleanName(dirEntry.name) ]; | ||
else if (dirEntry.isDirectory() && recursive) { | ||
if (!options.recursive) { | ||
return options.directories | ||
? [ ...output, cleanName(dirEntry.name, true) ] | ||
: output; | ||
} else { | ||
const subDirPath = path.join(dirPath, dirEntry.name); | ||
return [ ...output, ...listFiles(subDirPath, options) ]; | ||
} else return output; | ||
const subDirContents = listFiles(subDirPath, options).map(file => options.stripDirPath ? path.join(dirEntry.name, file) : null); | ||
return options.directories | ||
? [ ...output, cleanName(dirEntry.name, true), ...subDirContents ] | ||
: [ ...output, ...subDirContents ]; | ||
} | ||
}, []) | ||
@@ -51,4 +61,10 @@ : new Promise((resolve, reject) => { | ||
output.push(cleanName(dirEntry.name)); | ||
finish(); | ||
} else if (dirEntry.isDirectory() && recursive) { | ||
return finish(); | ||
} | ||
if (options.directories) { | ||
output.push(cleanName(dirEntry.name, true)); | ||
} | ||
if (options.recursive) { | ||
const subDirPath = path.join(dirPath, dirEntry.name); | ||
@@ -75,5 +91,3 @@ | ||
const { useAsync, extension, exclude } = options; | ||
if (!useAsync) { | ||
if (!options.useAsync) { | ||
const files = fs.readdirSync(dir, { withFileTypes: true }); | ||
@@ -83,4 +97,4 @@ const fileNames = dirEntriesToFileNames(dir, files, options); | ||
return fileNames | ||
.filter(extensionFilter(extension)) | ||
.filter(exclusionFilter(exclude)); | ||
.filter(extensionFilter(options.extension, options.directories)) | ||
.filter(exclusionFilter(options.exclude)); | ||
} | ||
@@ -94,7 +108,6 @@ | ||
.then(fileNames => { | ||
const filteredFilenames = fileNames | ||
.filter(extensionFilter(extension)) | ||
.filter(exclusionFilter(exclude)); | ||
resolve(filteredFilenames); | ||
const filteredFileNames = fileNames | ||
.filter(extensionFilter(options.extension, options.directories)) | ||
.filter(exclusionFilter(options.exclude)); | ||
resolve(filteredFileNames); | ||
}, reject); | ||
@@ -108,4 +121,2 @@ }); | ||
const { extension = null, stripDirPath = false } = options; | ||
return listFiles(dir, options) | ||
@@ -112,0 +123,0 @@ .map(p => removeFileExtension(p)); |
@@ -15,12 +15,10 @@ const path = require('path'); | ||
const extensionFilter = ext => item => { | ||
const extensionFilter = (ext, keepDirectories) => item => { | ||
if (isString(ext) && ext.length) { | ||
const itemExt = path.extname(item).toLowerCase(); | ||
return isString(itemExt) | ||
&& itemExt.length > 1 | ||
&& (itemExt === ext.toLowerCase() | ||
|| itemExt.substring(1) === ext.toLowerCase()); | ||
return (keepDirectories && item[item.length - 1] === path.sep) | ||
|| (isString(itemExt) && itemExt.length > 1 && (itemExt === ext.toLowerCase() || itemExt.substring(1) === ext.toLowerCase())); | ||
} else if (isArray(ext)) { | ||
return ext.some(subExtension => extensionFilter(subExtension)(item)); | ||
return ext.some(subExtension => extensionFilter(subExtension, keepDirectories)(item)); | ||
} | ||
@@ -27,0 +25,0 @@ |
25
test.js
const zaq = require('zaq'); | ||
const path = require('path'); | ||
const chalk = require('chalk'); | ||
const colleqtor = require('./index'); | ||
let testDir = path.join(__dirname, '/test'); | ||
const runTest = (code) => zaq.ok(chalk.green(code), eval(code)); | ||
const runAsyncTest = (code) => eval(code).then(results => zaq.ok(chalk.green(code), results)); | ||
const testDir = path.join(__dirname, '/test'); | ||
zaq.ok('LIST FILES: Only dir provided:', colleqtor.listFiles(testDir)); | ||
zaq.ok('lsitFiles: Dir and extension (log) provided:', colleqtor.listFiles(testDir, { extension: 'log' })); | ||
zaq.ok('listFiles: Dir and extension (txt) provided:', colleqtor.listFiles(testDir, { extension: 'txt' })); | ||
zaq.ok('listFiles: Dir and extensions (log, txt) provided:', colleqtor.listFiles(testDir, { extension: ['log', 'txt'] })); | ||
zaq.ok('listFiles: Dir and extension (txt) provided, stripping directory:', colleqtor.listFiles(testDir, { extension: 'txt', stripDirPath: true })); | ||
zaq.ok('gatherFileNames: Only dir provided:', colleqtor.gatherFileNames(testDir)); | ||
zaq.ok('.requireAll(testDir + \'/requireable\')', colleqtor.requireAll(testDir + '/requirable')); | ||
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)); | ||
runTest(`colleqtor.listFiles(testDir)`); | ||
runTest(`colleqtor.listFiles(testDir, { extension: 'txt', stripDirPath: true })`); | ||
runTest(`colleqtor.listFiles(testDir, { extension: ['log', 'txt'] })`); | ||
runTest(`colleqtor.listFiles(testDir, { extension: 'txt', stripDirPath: true })`); | ||
runTest(`colleqtor.listFiles(testDir, { directories: true, recursive: true, stripDirPath: true })`); | ||
runTest(`colleqtor.gatherFileNames(testDir)`); | ||
runTest(`colleqtor.requireAll(testDir + '/requirable')`); | ||
runTest(`colleqtor.getFileContents(colleqtor.listFiles(testDir, { extension: 'txt' }))`); | ||
runAsyncTest(`colleqtor.listFiles(testDir, { extension: 'txt', useAsync: true })`); | ||
runAsyncTest(`colleqtor.listFiles(testDir, { directories: true, useAsync: true, extension: 'log', recursive: true })`); |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
15964
205
1
2