aboutsummaryrefslogtreecommitdiff
path: root/node_modules/walkdir/walkdir.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-03-27 21:01:33 +0100
committerFlorian Dold <florian.dold@gmail.com>2019-03-27 21:01:33 +0100
commitcc97a4dd2a967e1c2273bd5f4c5f49a5bf2e2585 (patch)
tree92c5d88706a6ffc654d1b133618d357890e7096b /node_modules/walkdir/walkdir.js
parent3771b4d6b67b34c130f3a9a1a15f42deefdb2eda (diff)
remove node_modules
Diffstat (limited to 'node_modules/walkdir/walkdir.js')
-rw-r--r--node_modules/walkdir/walkdir.js254
1 files changed, 0 insertions, 254 deletions
diff --git a/node_modules/walkdir/walkdir.js b/node_modules/walkdir/walkdir.js
deleted file mode 100644
index 31badc4a9..000000000
--- a/node_modules/walkdir/walkdir.js
+++ /dev/null
@@ -1,254 +0,0 @@
-var EventEmitter = require('events').EventEmitter,
-_fs = require('fs'),
-_path = require('path'),
-sep = _path.sep||'/';// 0.6.x
-
-
-module.exports = walkdir;
-
-walkdir.find = walkdir.walk = walkdir;
-
-walkdir.sync = function(path,options,cb){
- if(typeof options == 'function') cb = options;
- options = options || {};
- options.sync = true;
- return walkdir(path,options,cb);
-
-};
-
-function walkdir(path,options,cb){
-
- if(typeof options == 'function') cb = options;
-
- options = options || {};
-
- var fs = options.fs || _fs;
-
- var emitter = new EventEmitter(),
- dontTraverse = [],
- allPaths = (options.return_object?{}:[]),
- resolved = false,
- inos = {},
- stop = 0,
- pause = null,
- ended = 0,
- jobs=0,
- job = function(value) {
- jobs += value;
- if(value < 1 && !tick) {
- tick = 1;
- process.nextTick(function(){
- tick = 0;
- if(jobs <= 0 && !ended) {
- ended = 1;
- emitter.emit('end');
- }
- });
- }
- }, tick = 0;
-
- emitter.ignore = function(path){
- if(Array.isArray(path)) dontTraverse.push.apply(dontTraverse,path)
- else dontTraverse.push(path)
- return this
- }
-
- //mapping is stat functions to event names.
- var statIs = [['isFile','file'],['isDirectory','directory'],['isSymbolicLink','link'],['isSocket','socket'],['isFIFO','fifo'],['isBlockDevice','blockdevice'],['isCharacterDevice','characterdevice']];
-
- var statter = function (path,first,depth) {
- job(1);
- var statAction = function fn(err,stat,data) {
-
- job(-1);
- if(stop) return;
-
- // in sync mode i found that node will sometimes return a null stat and no error =(
- // this is reproduceable in file descriptors that no longer exist from this process
- // after a readdir on /proc/3321/task/3321/ for example. Where 3321 is this pid
- // node @ v0.6.10
- if(err || !stat) {
- emitter.emit('fail',path,err);
- return;
- }
-
-
- //if i have evented this inode already dont again.
- var fileName = _path.basename(path);
- var fileKey = stat.dev + '-' + stat.ino + '-' + fileName;
- if(inos[fileKey] && stat.ino) return;
- inos[fileKey] = 1;
-
- if (first && stat.isDirectory()) {
- emitter.emit('targetdirectory',path,stat,depth);
- return;
- }
-
- emitter.emit('path', path, stat,depth);
-
- var i,name;
-
- for(var j=0,k=statIs.length;j<k;j++) {
- if(stat[statIs[j][0]]()) {
- emitter.emit(statIs[j][1],path,stat,depth);
- break;
- }
- }
- };
-
- if(options.sync) {
- var stat,ex;
- try{
- stat = fs.lstatSync(path);
- } catch (e) {
- ex = e;
- }
-
- statAction(ex,stat);
- } else {
- fs.lstat(path,statAction);
- }
- },readdir = function(path,stat,depth){
- if(!resolved) {
- path = _path.resolve(path);
- resolved = 1;
- }
-
- if(options.max_depth && depth >= options.max_depth){
- emitter.emit('maxdepth',path,stat,depth);
- return;
- }
-
- if(dontTraverse.length){
- for(var i=0;i<dontTraverse.length;++i){
- if(dontTraverse[i] == path) {
- dontTraverse.splice(i,1)
- return;
- }
- }
- }
-
- job(1);
- var readdirAction = function(err,files) {
- job(-1);
- if (err || !files) {
- //permissions error or invalid files
- emitter.emit('fail',path,err);
- return;
- }
-
- if(!files.length) {
- // empty directory event.
- emitter.emit('empty',path,stat,depth);
- return;
- }
-
- if(path == sep) path='';
- for(var i=0,j=files.length;i<j;i++){
- statter(path+sep+files[i],false,(depth||0)+1);
- }
-
- };
-
-
- //use same pattern for sync as async api
- if(options.sync) {
- var e,files;
- try {
- files = fs.readdirSync(path);
- } catch (e) { }
-
- readdirAction(e,files);
- } else {
- fs.readdir(path,readdirAction);
- }
- };
-
- if (options.follow_symlinks) {
- var linkAction = function(err,path,depth){
- job(-1);
- //TODO should fail event here on error?
- statter(path,false,depth);
- };
-
- emitter.on('link',function(path,stat,depth){
- job(1);
- if(options.sync) {
- var lpath,ex;
- try {
- lpath = fs.readlinkSync(path);
- } catch(e) {
- ex = e;
- }
- linkAction(ex,_path.resolve(_path.dirname(path),lpath),depth);
-
- } else {
- fs.readlink(path,function(err,lpath){
- linkAction(err,_path.resolve(_path.dirname(path),lpath),depth);
- });
- }
- });
- }
-
- if (cb) {
- emitter.on('path',cb);
- }
-
- if (options.sync) {
- if(!options.no_return){
- emitter.on('path',function(path,stat){
- if(options.return_object) allPaths[path] = stat;
- else allPaths.push(path);
- });
- }
- }
-
- if (!options.no_recurse) {
- emitter.on('directory',readdir);
- }
- //directory that was specified by argument.
- emitter.once('targetdirectory',readdir);
- //only a fail on the path specified by argument is fatal
- emitter.once('fail',function(_path,err){
- //if the first dir fails its a real error
- if(path == _path) {
- emitter.emit('error',path,err);
- }
- });
-
- statter(path,1);
- if (options.sync) {
- return allPaths;
- } else {
- //support stopping everything.
- emitter.end = emitter.stop = function(){stop = 1;};
- //support pausing everything
- var emitQ = [];
- emitter.pause = function(){
- job(1);
- pause = true;
- emitter.emit = function(){
- emitQ.push(arguments);
- };
- };
- // support getting the show going again
- emitter.resume = function(){
- if(!pause) return;
- pause = false;
- // not pending
- job(-1);
- //replace emit
- emitter.emit = EventEmitter.prototype.emit;
- // local ref
- var q = emitQ;
- // clear ref to prevent infinite loops
- emitQ = [];
- while(q.length) {
- emitter.emit.apply(emitter,q.shift());
- }
- };
-
- return emitter;
- }
-
-}