file-system
Advanced tools
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) { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16149
503
65