Socket
Socket
Sign inDemoInstall

file-system

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

file-system - npm Package Compare versions

Comparing version 1.0.4 to 1.1.0

97

index.js

@@ -46,7 +46,11 @@ /**

filter.forEach(function(item) {
item = item
.replace(/\*\.([^\/]+)$/, '[^/]+.$1$')
item = (item + '$')
.replace(/\*\.([^\/]+)/, '[^/]+.$1')
.replace('**\/', '([^/]+\/)*')
.replace(/([\/\.])/g, '\\$1');
if (item.indexOf('/') == -1) {
item = '^' + item;
}
ret.push('(' + item + ')');

@@ -184,3 +188,4 @@ });

* @description
* Recurse into a directory, executing callback for each file.
* Recurse into a directory, executing callback for each file and folder
* if the filename is undefiend, the callback is for folder, otherwise for file.
* and it is asynchronous

@@ -194,5 +199,6 @@ * @example

callback = filter;
filter = null;
filter = null;
}
var filterReg = filterToReg(filter);
var rootpath = dirpath;

@@ -209,6 +215,9 @@ function recurse(dirpath) {

recurse(filepath);
callback(filepath);
} else {
if (filterReg) {
// Normalize \\ paths to / paths.
var _filepath = util.path.unixifyPath(filepath);
var relative = path.relative(rootpath, filepath);
var _filepath = util.path.unixifyPath(relative);
if (filterReg.test(_filepath)) {

@@ -232,34 +241,70 @@ callback(filepath, filename);

* Same as recurse, but it is synchronous
* @returns {Array} selected files path.
* @example
* var filesPath = file.recurseSync('path');
* var filesPath = file.recurseSync('path', ['*.js', 'path/**\/*.html']);
* file.recurseSync('path', function(filepath, filename) {});
* file.recurseSync('path', ['*.js', 'path/**\/*.html'], function(filepath, filename) {});
*/
exports.recurseSync = function(dirpath, filter) {
exports.recurseSync = function(dirpath, filter, callback) {
if (util.isFunction(filter)) {
callback = filter;
filter = null;
}
var filterReg = filterToReg(filter);
var filesPath = [];
var rootpath = dirpath;
function recurse(dirpath) {
fs.readdirSync(dirpath).forEach(function(file) {
var filepath = path.join(dirpath, file);
var stats = fs.statSync(filepath);
// permission bug
try {
fs.readdirSync(dirpath).forEach(function(filename) {
var filepath = path.join(dirpath, filename);
var stats = fs.statSync(filepath);
if (stats.isDirectory()) {
recurse(filepath);
} else {
if (filterReg) {
var _filepath = util.path.unixifyPath(filepath);
if (filterReg.test(_filepath)) {
filesPath.push(filepath);
if (stats.isDirectory()) {
recurse(filepath);
callback(filepath);
} else {
if (filterReg) {
var relative = path.relative(rootpath, filepath);
var _filepath = util.path.unixifyPath(relative);
if (filterReg.test(_filepath)) {
callback(filepath, filename);
}
} else {
callback(filepath, filename);
}
} else {
filesPath.push(filepath);
}
}
});
});
} catch(e) {
fs.chmodSync(dirpath, 511);
recurse(dirpath);
}
}
recurse(dirpath);
};
return filesPath;
};
/**
* @description
* Remove file or all files in folder
* @example
* file.rmdirSync('path');
* file.rmdirSync('path/file.txt');
*/
exports.rmdirSync = function(dirpath) {
var stats = fs.statSync(dirpath);
if (stats.isFile()) {
fs.unlinkSync(dirpath);
} else {
exports.recurseSync(dirpath, function(filepath, filename) {
// it is file, otherwise it's folder
if (filename) {
fs.unlinkSync(filepath);
} else {
fs.rmdirSync(filepath);
}
});
fs.rmdirSync(dirpath);
}
};
{
"name": "file-system",
"version": "1.0.4",
"version": "1.1.0",
"description": "Strengthen the ability of file system",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -32,3 +32,4 @@ ## file-system

### file.recurse
Recurse into a directory, executing callback for each file.
Recurse into a directory, executing callback for each file and folder.
if the filename is undefiend, the callback is for folder, otherwise for file.
And you can pass filter params for filter file.

@@ -38,13 +39,29 @@ ```js

file.recurse('path', ['*.js', 'path/**/*.html'], function(filepath, filename) { });
file.recurse('path', ['*.js', 'path/**/*.html'], function(filepath, filename) {
if (filename) {
// it's file
} else {
// it's folder
}
});
```
### file.recurseSync
Same as recurse, but it is synchronous
```js
var filesPath = file.recurseSync('path');
var filesPath = file.recurseSync('path', ['*.js', 'path/**/*.html']);
file.recurseSync('path', function(filepath, filename) {
});
filesPath.forEach(function(item) {
file.recurseSync('path', ['*.js', 'path/**/*.html'], function(filepath, filename) {
});
```
### file.rmdirSync
Recurse into a directory, remove all of the files and folder in this directory.
it also can delete file.
```js
file.rmdirSync('path');
file.rmdirSync('path/file.txt');
```
var assert = require("assert");
var file = require('../index');
var fs = require('fs');
var grunt = require('grunt');
var path = require('path');

@@ -74,6 +73,4 @@

after(function() {
grunt.file.delete(getPath('var/mkdir'), {
force: true
});
file.rmdirSync(getPath('var/mkdir'));
});
});

@@ -42,6 +42,8 @@ var assert = require("assert");

file.recurse(getPath('var/recurse/simple'), function(filepath, filename) {
assert.equal(true, filesPath.indexOf(filepath) != -1);
if (++count == filesPath.length) {
done();
if (filename) {
assert.equal(true, filesPath.indexOf(filepath) != -1);
if (++count == filesPath.length) {
done();
}
}

@@ -64,6 +66,8 @@ });

], function(filepath, filename) {
assert.equal(true, filterPath.indexOf(filepath) != -1);
if (filename) {
assert.equal(true, filterPath.indexOf(filepath) != -1);
if (++count == filterPath.length) {
done();
if (++count == filterPath.length) {
done();
}
}

@@ -74,3 +78,8 @@ });

it('recurseSync files', function() {
var filesPath = file.recurseSync(getPath('var/recurse/filter'));
var filesPath = [];
file.recurseSync(getPath('var/recurse/filter'), function(filepath, filename) {
if (filename) {
filesPath.push(filepath);
}
});

@@ -81,9 +90,12 @@ assert.equal(filesPath.length, allFiles[1].length);

it('recurseSync filter files', function() {
var filesPath = file.recurseSync(getPath('var/recurse/filter'), [
'*.js',
var filesPath = [];
file.recurseSync(getPath('var/recurse/filter'), [
'demo.js',
'1/**/*.css'
]);
], function(filepath, filename) {
if (filename) {
filesPath.push(filepath);
}
});
var filterPath = [
getPath('var/recurse/filter/1/demo.js'),
getPath('var/recurse/filter/1/2/demo.js'),
getPath('var/recurse/filter/1/2/demo.css'),

@@ -93,10 +105,8 @@ getPath('var/recurse/filter/demo.js')

assert.deepEqual(filesPath, filesPath);
assert.deepEqual(filesPath, filterPath);
});
after(function() {
grunt.file.delete(getPath('var/recurse/'), {
force: true
});
file.rmdirSync(getPath('var/recurse'));
});
});

@@ -61,2 +61,6 @@ var util = require('util');

exports.isUndefined = function(value) {
return typeof value == 'undefined';
};
exports.hrtime = function(time) {

@@ -63,0 +67,0 @@ if (time) {

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc