Socket
Socket
Sign inDemoInstall

readdir

Package Overview
Dependencies
1
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.6 to 0.0.8

120

lib/readdir.js

@@ -7,2 +7,3 @@

var fs = require('fs');
var Q = require('q');

@@ -81,3 +82,3 @@ /**

*/
function read_dir(dir, appendTo, prefixLength, options) {
function read_dir_sync(dir, appendTo, prefixLength, options) {
var contents = fs.readdirSync(dir),

@@ -90,12 +91,10 @@ result = appendTo || [];

if(should_read_directory(dir, itm, options)) {
read_dir(newPath + '/', result, prefixLength, options);
if(exports.INCLUDE_DIRECTORIES & options) {
result.push(newPath.substring(prefixLength) + '/');
}
read_dir_sync(newPath + '/', result, prefixLength, options);
}
if(exports.INCLUDE_DIRECTORIES & options) {
result.push(newPath.substring(prefixLength) + '/');
}
}
else {
if(result.indexOf(newPath) < 0) {
result.push(newPath.substring(prefixLength));
}
result.push(newPath.substring(prefixLength));
}

@@ -107,2 +106,41 @@ });

function read_dir(dir, appendTo, prefixLength, options) {
var deferred = Q.defer();
fs.readdir(dir, function (err, contents) {
if (err) deferred.reject(err);
else if (!contents.length) {
deferred.resolve();
}
else {
Q.all(contents.map(function (itm) {
var deferred = Q.defer();
var newPath = dir.replace(/\/$/, '') + '/' + itm;
fs.stat(newPath, function (err, stat) {
var isDirectory = stat && stat.isDirectory();
if (err) deferred.reject(err);
else if (isDirectory) {
appendTo.push(newPath.substring(prefixLength) + '/');
if (should_read_directory(dir, itm, options)) {
read_dir(newPath, appendTo, prefixLength, options).then(deferred.resolve, deferred.reject);
}
else {
deferred.resolve();
}
}
else {
deferred.resolve(appendTo.push(newPath.substring(prefixLength) + (isDirectory ? '/' : '')));
}
});
return deferred.promise;
})).then(deferred.resolve, deferred.reject);
}
});
return deferred.promise;
}
/**

@@ -145,12 +183,3 @@ * Changes the values in the supplied paths array to be absolute URIs

/**
*
* @param {String} basePath
* @param {String[]} [includeFilters]
* @param {Number} [options]
*/
exports.readSync = function(basePath, includeFilters, options) {
var rootDir = basePath.replace(/\/$/, '') + '/',
allFiles = read_dir(rootDir, [], rootDir.length, options);
function apply_filters(basePath, allFiles, includeFilters, options) {
if(Array.isArray(includeFilters)) {

@@ -173,4 +202,59 @@ allFiles = file_list_filter(allFiles, includeFilters);

return allFiles;
}
/**
*
* @param {String} basePath
* @param {String[]} [includeFilters]
* @param {Number} [options]
*/
exports.readSync = function(basePath, includeFilters, options) {
var rootDir = basePath.replace(/\/$/, '') + '/';
return apply_filters(basePath, read_dir_sync(rootDir, [], rootDir.length, options), includeFilters, options);
};
/**
*
* @param {string} basePath
* @param {string[]} includeFilters
* @param {number} options
* @param {Function} handler
*/
exports.read = function(basePath, includeFilters, options, handler) {
var callback;
var assert = require('assert');
assert.equal(typeof basePath, 'string', 'basePath must be a string');
assert.equal(typeof arguments[arguments.length - 1], 'function', 'last argument must be a function');
switch (arguments.length) {
case 2:
callback = includeFilters;
includeFilters = null;
options = 0;
break;
case 3:
callback = options;
if (typeof includeFilters === "number") {
options = includeFilters;
includeFilters = null;
}
else {
options = 0;
}
}
assert.ok(Array.isArray(includeFilters) || includeFilters === null, 'includeFilters must be null or an array of filters');
assert.equal(typeof options, 'number', 'options must be set as a number');
var rootDir = basePath.replace(/\/$/, '') + '/',
allFiles = [];
read_dir(rootDir, allFiles, rootDir.length, options).then(function () {
callback(null, apply_filters(basePath, allFiles, includeFilters, options));
}, function (err) {
callback(err, []);
});
};
exports.isDir = is_dir;

@@ -177,0 +261,0 @@

40

package.json
{
"name": "readdir",
"description": "Reads a directory and return results with the ability to use Ant style file match patterns ",
"version": "0.0.6",
"author": "Steve King <steve@mydev.co>",
"contributors": [ { "name": "Steve King", "email": "steve@mydev.co" } ],
"dependencies": {},
"devDependencies": {},
"keywords": ["directory", "fs"],
"repository": "git://github.com/steveukx/readdir.js",
"main": "lib/readdir",
"bin": {},
"scripts": {},
"config": {},
"engines": { "node": ">= 0.4.1" }
"name": "readdir",
"description": "Reads a directory and return results with the ability to use Ant style file match patterns ",
"version": "0.0.8",
"author": "Steve King <steve@mydev.co>",
"contributors": [
{
"name": "Steve King",
"email": "steve@mydev.co"
}
],
"dependencies": {
"q": "~1.0.1"
},
"devDependencies": {},
"keywords": [
"directory",
"fs"
],
"repository": "git://github.com/steveukx/readdir.js",
"main": "lib/readdir",
"bin": {},
"scripts": {},
"config": {},
"engines": {
"node": ">= 0.4.1"
}
}
var Assert = require('assert');
var readdir = require('../lib/readdir');
(function() {
var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('example_dir');
Assert.deepEqual(everyFile, [ 'AAA/aaa.js',
var readSync = readdir.readSync;
Assert.deepEqual(readSync('example_dir', null, readdir.CASELESS_SORT), [
'AAA/aaa.js',
'AAA/aaa.txt',

@@ -21,6 +21,5 @@ 'abc.js',

(function() {
var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('example_dir', ['**/**.js']);
Assert.deepEqual(everyFile, ['AAA/aaa.js',
var readSync = readdir.readSync;
Assert.deepEqual(readSync('example_dir', ['**/**.js'], readdir.CASELESS_SORT), [
'AAA/aaa.js',
'BBB/bbb.js',

@@ -33,5 +32,4 @@ 'CCC/ccc.js',

var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('example_dir', ['**.js']);
Assert.deepEqual(everyFile, [ 'AAA/aaa.js',
Assert.deepEqual(readSync('example_dir', ['**.js'], readdir.CASELESS_SORT), [
'AAA/aaa.js',
'abc.js',

@@ -45,5 +43,4 @@ 'BBB/bbb.js',

var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('example_dir', ['BBB/*']);
Assert.deepEqual(everyFile, ['BBB/bbb.js',
Assert.deepEqual(readSync('example_dir', ['BBB/*'], readdir.CASELESS_SORT), [
'BBB/bbb.js',
'BBB/bbb.txt' ], 'path prefix requires that directory, trailing star allows any file type');

@@ -54,5 +51,4 @@ }());

var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync(process.cwd() + '/example_dir/', ['CCC/*']);
Assert.deepEqual(everyFile, ['CCC/ccc.js',
Assert.deepEqual(readSync(process.cwd() + '/example_dir/', ['CCC/*']), [
'CCC/ccc.js',
'CCC/ccc.txt'], 'Path prefix requires that directory, trailing single star ignores subsequent sub-directories');

@@ -63,7 +59,7 @@ }());

var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('../test/example_dir', ['CCC/**'], require('../lib/readdir.js').ABSOLUTE_PATHS),
var everyFile = readSync('../test/example_dir', ['CCC/**'], readdir.ABSOLUTE_PATHS + readdir.CASELESS_SORT),
cwd = process.cwd();
Assert.deepEqual(everyFile, [cwd + '/example_dir/CCC/ccc.js',
Assert.deepEqual(everyFile, [
cwd + '/example_dir/CCC/ccc.js',
cwd + '/example_dir/CCC/ccc.txt',

@@ -76,5 +72,4 @@ cwd + '/example_dir/CCC/DDD/ddd.js',

var readSync = require('../lib/readdir.js').readSync;
var everyFile = readSync('./example_dir', ['*.txt']);
Assert.deepEqual(everyFile, ['abc.txt'], 'Single star ignores sub-directories and filename is a suffix');
Assert.deepEqual(readSync('./example_dir', ['*.txt'], readdir.CASELESS_SORT), [
'abc.txt'], 'Single star ignores sub-directories and filename is a suffix');
}());

@@ -86,6 +81,6 @@

everyFile = readSync('./case_sensitive_dir', null, require('../lib/readdir.js').CASELESS_SORT);
everyFile = readSync('./case_sensitive_dir', null, readdir.CASELESS_SORT);
Assert.deepEqual(everyFile, ['aBC.xml', 'Abc.xsl']);
everyFile = readSync('./case_sensitive_dir', null, require('../lib/readdir.js').CASE_SORT);
everyFile = readSync('./case_sensitive_dir', null, readdir.CASE_SORT);
Assert.deepEqual(everyFile, ['Abc.xsl', 'aBC.xml']);

@@ -95,22 +90,45 @@ }());

(function() {
var readSync = require('../lib/readdir.js').readSync,
everyFile;
everyFile = readSync('./example_dir', null, require('../lib/readdir.js').INCLUDE_DIRECTORIES);
console.log(everyFile);
Assert.deepEqual(everyFile, [ 'AAA/aaa.js',
var readSync = require('../lib/readdir.js').readSync;
Assert.deepEqual(readSync('./example_dir', null, readdir.INCLUDE_DIRECTORIES + readdir.CASELESS_SORT), [
'AAA/',
'AAA/aaa.js',
'AAA/aaa.txt',
'AAA/',
'abc.js',
'abc.txt',
'BBB/',
'BBB/bbb.js',
'BBB/bbb.txt',
'BBB/',
'CCC/',
'CCC/ccc.js',
'CCC/ccc.txt',
'CCC/DDD/',
'CCC/DDD/ddd.js',
'CCC/DDD/ddd.txt',
'CCC/DDD/',
'CCC/' ], 'Not supplying a filter selects every file, directories are listed after their contents');
}());
'CCC/DDD/ddd.txt'], 'Not supplying a filter selects every file, directories are listed after their contents');
}());
(function() {
var readdir = require('../lib/readdir.js'),
read = readdir.read;
read('./example_dir', readdir.INCLUDE_DIRECTORIES + readdir.CASELESS_SORT, function (error, everyFile) {
process.nextTick(function () {
Assert.equal(error, null, 'Should not have thrown an error while scanning directory');
Assert.deepEqual(everyFile, [
'AAA/',
'AAA/aaa.js',
'AAA/aaa.txt',
'abc.js',
'abc.txt',
'BBB/',
'BBB/bbb.js',
'BBB/bbb.txt',
'CCC/',
'CCC/ccc.js',
'CCC/ccc.txt',
'CCC/DDD/',
'CCC/DDD/ddd.js',
'CCC/DDD/ddd.txt' ], 'Not supplying a filter selects every file, directories are listed after their contents');
});
});
}());

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc