module.exports=LinkWriter;var fs=require("graceful-fs");var Writer=require("./writer.js");var inherits=require("inherits");var path=require("path");var rimraf=require("rimraf");inherits(LinkWriter,Writer);function LinkWriter(b){var a=this;if(!(a instanceof LinkWriter)){throw new Error("LinkWriter must be called as constructor.")}if(!((b.type==="Link"&&b.Link)||(b.type==="SymbolicLink"&&b.SymbolicLink))){throw new Error("Non-link type "+b.type)}if(b.linkpath===""){b.linkpath="."}if(!b.linkpath){a.error("Need linkpath property to create "+b.type)}Writer.call(this,b)}LinkWriter.prototype._create=function(){var a=this;var d=a.type==="Link"||process.platform==="win32";var c=d?"link":"symlink";var b=d?path.resolve(a.dirname,a.linkpath):a.linkpath;if(d){return clobber(a,b,c)}fs.readlink(a._path,function(f,e){if(e&&e===b){return finish(a)}clobber(a,b,c)})};function clobber(a,b,c){rimraf(a._path,function(d){if(d){return a.error(d)}create(a,b,c)})}function create(a,b,c){fs[c](b,a._path,function(d){if(d){if((d.code==="ENOENT"||d.code==="EACCES"||d.code==="EPERM")&&process.platform==="win32"){a.ready=true;a.emit("ready");a.emit("end");a.emit("close");a.end=a._finish=function(){}}else{return a.error(d)}}finish(a)})}function finish(a){a.ready=true;a.emit("ready");if(a._ended&&!a._finished){a._finish()}}LinkWriter.prototype.end=function(){this._ended=true;if(this.ready){this._finished=true;this._finish()}};
module.exports=Reader;var fs=require("graceful-fs");var Stream=require("stream").Stream;var inherits=require("inherits");var path=require("path");var getType=require("./get-type.js");var hardLinks=Reader.hardLinks={};var Abstract=require("./abstract.js");inherits(Reader,Abstract);var LinkReader=require("./link-reader.js");function Reader(d,b){var a=this;if(!(a instanceof Reader)){return new Reader(d,b)}if(typeof d==="string"){d={path:d}}if(!d.path){a.error("Must provide a path",null,true)}var c;var e;if(d.type&&typeof d.type==="function"){c=d.type;e=c}else{c=getType(d);e=Reader}if(b&&!c){c=getType(b);d[c]=true;d.type=c}switch(c){case"Directory":e=require("./dir-reader.js");break;case"Link":case"File":e=require("./file-reader.js");break;case"SymbolicLink":e=LinkReader;break;case"Socket":e=require("./socket-reader.js");break;case null:e=require("./proxy-reader.js");break}if(!(a instanceof e)){return new e(d)}Abstract.call(a);a.readable=true;a.writable=false;a.type=c;a.props=d;a.depth=d.depth=d.depth||0;a.parent=d.parent||null;a.root=d.root||(d.parent&&d.parent.root)||a;a._path=a.path=path.resolve(d.path);if(process.platform==="win32"){a.path=a._path=a.path.replace(/\?/g,"_");if(a._path.length>=260){a._swallowErrors=true;a._path="\\\\?\\"+a.path.replace(/\//g,"\\")}}a.basename=d.basename=path.basename(a.path);a.dirname=d.dirname=path.dirname(a.path);d.parent=d.root=null;a.size=d.size;a.filter=typeof d.filter==="function"?d.filter:null;if(d.sort==="alpha"){d.sort=alphasort}a._stat(b)}function alphasort(d,c){return d===c?0:d.toLowerCase()>c.toLowerCase()?1:d.toLowerCase()<c.toLowerCase()?-1:d>c?1:-1}Reader.prototype._stat=function(b){var a=this;var d=a.props;var c=d.follow?"stat":"lstat";if(b){process.nextTick(e.bind(null,null,b))}else{fs[c](a._path,e)}function e(n,j){if(n){return a.error(n)}Object.keys(j).forEach(function(p){d[p]=j[p]});if(undefined!==a.size&&d.size!==a.size){return a.error("incorrect size")}a.size=d.size;var i=getType(d);var l=d.hardlinks!==false;if(l&&i!=="Directory"&&d.nlink&&d.nlink>1){var g=d.dev+":"+d.ino;if(hardLinks[g]===a._path||!hardLinks[g]){hardLinks[g]=a._path}else{i=a.type=a.props.type="Link";a.Link=a.props.Link=true;a.linkpath=a.props.linkpath=hardLinks[g];a._stat=a._read=LinkReader.prototype._read}}if(a.type&&a.type!==i){a.error("Unexpected type: "+i)}if(a.filter){var m=a._proxy||a;if(!a.filter.call(m,m,d)){if(!a._disowned){a.abort();a.emit("end");a.emit("close")}return}}var o=["_stat","stat","ready"];var h=0;(function f(){if(a._aborted){a.emit("end");a.emit("close");return}if(a._paused&&a.type!=="Directory"){a.once("resume",f);return}var k=o[h++];if(!k){return a._read()}a.emit(k,d);f()})()}};Reader.prototype.pipe=function(b){var a=this;if(typeof b.add==="function"){a.on("entry",function(d){var c=b.add(d);if(c===false){a.pause()}})}return Stream.prototype.pipe.apply(this,arguments)};Reader.prototype.pause=function(a){this._paused=true;a=a||this;this.emit("pause",a);if(this._stream){this._stream.pause(a)}};Reader.prototype.resume=function(a){this._paused=false;a=a||this;this.emit("resume",a);if(this._stream){this._stream.resume(a)}this._read()};Reader.prototype._read=function(){this.error("Cannot read unknown type: "+this.type)};