diff options
| author | Ben Beltran <ben@nsovocal.com> | 2015-09-28 12:39:59 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2015-09-28 12:39:59 -0500 |
| commit | 455f099b504ec07dd492ab31987ae05a6f6774c7 (patch) | |
| tree | 22b0c7fd8e492733b97e661750a2d79c46da451d /atom/packages/ex-mode/node_modules/fs-plus/lib | |
| parent | 24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (diff) | |
Adds atom packages
Diffstat (limited to 'atom/packages/ex-mode/node_modules/fs-plus/lib')
| -rw-r--r-- | atom/packages/ex-mode/node_modules/fs-plus/lib/fs-plus.js | 646 |
1 files changed, 646 insertions, 0 deletions
diff --git a/atom/packages/ex-mode/node_modules/fs-plus/lib/fs-plus.js b/atom/packages/ex-mode/node_modules/fs-plus/lib/fs-plus.js new file mode 100644 index 0000000..499cd64 --- /dev/null +++ b/atom/packages/ex-mode/node_modules/fs-plus/lib/fs-plus.js @@ -0,0 +1,646 @@ +(function() { + var BINARY_EXTENSIONS, COMPRESSED_EXTENSIONS, IMAGE_EXTENSIONS, MARKDOWN_EXTENSIONS, Module, async, fs, fsPlus, isMoveTargetValid, isMoveTargetValidSync, isPathValid, lstatSyncNoException, mkdirp, path, rimraf, statSyncNoException, _, + __slice = [].slice; + + fs = require('fs'); + + Module = require('module'); + + path = require('path'); + + _ = require('underscore-plus'); + + async = require('async'); + + mkdirp = require('mkdirp'); + + rimraf = require('rimraf'); + + fsPlus = { + getHomeDirectory: function() { + if (process.platform === 'win32') { + return process.env.USERPROFILE; + } else { + return process.env.HOME; + } + }, + absolute: function(relativePath) { + var e, homeDir; + if (relativePath == null) { + return null; + } + homeDir = fsPlus.getHomeDirectory(); + if (relativePath === '~') { + relativePath = homeDir; + } else if (relativePath.indexOf('~/') === 0) { + relativePath = "" + homeDir + (relativePath.substring(1)); + } + try { + return fs.realpathSync(relativePath); + } catch (_error) { + e = _error; + return relativePath; + } + }, + normalize: function(pathToNormalize) { + var home, normalizedPath; + if (pathToNormalize == null) { + return null; + } + normalizedPath = path.normalize(pathToNormalize.toString()); + if (home = fsPlus.getHomeDirectory()) { + if (normalizedPath === '~') { + normalizedPath = home; + } else if (normalizedPath.indexOf("~" + path.sep) === 0) { + normalizedPath = "" + home + (normalizedPath.substring(1)); + } + } + return normalizedPath; + }, + getAppDataDirectory: function() { + switch (process.platform) { + case 'darwin': + return fsPlus.absolute('~/Library/Application Support'); + case 'linux': + return '/var/lib'; + case 'win32': + return process.env.APPDATA; + default: + return null; + } + }, + isAbsolute: function(pathToCheck) { + if (pathToCheck == null) { + pathToCheck = ''; + } + if (process.platform === 'win32') { + if (pathToCheck[1] === ':') { + return true; + } + if (pathToCheck[0] === '\\' && pathToCheck[1] === '\\') { + return true; + } + } else { + return pathToCheck[0] === '/'; + } + return false; + }, + existsSync: function(pathToCheck) { + return isPathValid(pathToCheck) && (statSyncNoException(pathToCheck) !== false); + }, + isDirectorySync: function(directoryPath) { + var stat; + if (!isPathValid(directoryPath)) { + return false; + } + if (stat = statSyncNoException(directoryPath)) { + return stat.isDirectory(); + } else { + return false; + } + }, + isDirectory: function(directoryPath, done) { + if (!isPathValid(directoryPath)) { + return done(false); + } + return fs.stat(directoryPath, function(error, stat) { + if (error != null) { + return done(false); + } else { + return done(stat.isDirectory()); + } + }); + }, + isFileSync: function(filePath) { + var stat; + if (!isPathValid(filePath)) { + return false; + } + if (stat = statSyncNoException(filePath)) { + return stat.isFile(); + } else { + return false; + } + }, + isSymbolicLinkSync: function(symlinkPath) { + var stat; + if (!isPathValid(symlinkPath)) { + return false; + } + if (stat = lstatSyncNoException(symlinkPath)) { + return stat.isSymbolicLink(); + } else { + return false; + } + }, + isSymbolicLink: function(symlinkPath, callback) { + if (isPathValid(symlinkPath)) { + return fs.lstat(symlinkPath, function(error, stat) { + return typeof callback === "function" ? callback((stat != null) && stat.isSymbolicLink()) : void 0; + }); + } else { + return process.nextTick(function() { + return typeof callback === "function" ? callback(false) : void 0; + }); + } + }, + isExecutableSync: function(pathToCheck) { + var stat; + if (!isPathValid(pathToCheck)) { + return false; + } + if (stat = statSyncNoException(pathToCheck)) { + return (stat.mode & 0x1ff & 1) !== 0; + } else { + return false; + } + }, + getSizeSync: function(pathToCheck) { + var _ref; + if (isPathValid(pathToCheck)) { + return (_ref = statSyncNoException(pathToCheck).size) != null ? _ref : -1; + } else { + return -1; + } + }, + listSync: function(rootPath, extensions) { + var paths; + if (!fsPlus.isDirectorySync(rootPath)) { + return []; + } + paths = fs.readdirSync(rootPath); + if (extensions) { + paths = fsPlus.filterExtensions(paths, extensions); + } + paths = paths.sort(function(a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + paths = paths.map(function(childPath) { + return path.join(rootPath, childPath); + }); + return paths; + }, + list: function() { + var done, extensions, rest, rootPath; + rootPath = arguments[0], rest = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + if (rest.length > 1) { + extensions = rest.shift(); + } + done = rest.shift(); + return fs.readdir(rootPath, function(error, paths) { + if (error != null) { + return done(error); + } else { + if (extensions) { + paths = fsPlus.filterExtensions(paths, extensions); + } + paths = paths.sort(function(a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + paths = paths.map(function(childPath) { + return path.join(rootPath, childPath); + }); + return done(null, paths); + } + }); + }, + filterExtensions: function(paths, extensions) { + extensions = extensions.map(function(ext) { + if (ext === '') { + return ext; + } else { + return '.' + ext.replace(/^\./, ''); + } + }); + return paths.filter(function(pathToCheck) { + return _.include(extensions, path.extname(pathToCheck)); + }); + }, + listTreeSync: function(rootPath) { + var onPath, paths; + paths = []; + onPath = function(childPath) { + paths.push(childPath); + return true; + }; + fsPlus.traverseTreeSync(rootPath, onPath, onPath); + return paths; + }, + move: function(source, target, callback) { + return isMoveTargetValid(source, target, function(isMoveTargetValidErr, isTargetValid) { + var error, targetParentPath; + if (isMoveTargetValidErr) { + callback(isMoveTargetValidErr); + return; + } + if (!isTargetValid) { + error = new Error("'" + target + "' already exists."); + error.code = 'EEXIST'; + callback(error); + return; + } + targetParentPath = path.dirname(target); + return fs.exists(targetParentPath, function(targetParentExists) { + if (targetParentExists) { + fs.rename(source, target, callback); + return; + } + return fsPlus.makeTree(targetParentPath, function(makeTreeErr) { + if (makeTreeErr) { + callback(makeTreeErr); + return; + } + return fs.rename(source, target, callback); + }); + }); + }); + }, + moveSync: function(source, target) { + var error, targetParentPath; + if (!isMoveTargetValidSync(source, target)) { + error = new Error("'" + target + "' already exists."); + error.code = 'EEXIST'; + throw error; + } + targetParentPath = path.dirname(target); + if (!fs.existsSync(targetParentPath)) { + fsPlus.makeTreeSync(targetParentPath); + } + return fs.renameSync(source, target); + }, + removeSync: function(pathToRemove) { + return rimraf.sync(pathToRemove); + }, + remove: function(pathToRemove, callback) { + return rimraf(pathToRemove, callback); + }, + writeFileSync: function(filePath, content, options) { + mkdirp.sync(path.dirname(filePath)); + return fs.writeFileSync(filePath, content, options); + }, + writeFile: function(filePath, content, options, callback) { + callback = _.last(arguments); + return mkdirp(path.dirname(filePath), function(error) { + if (error != null) { + return typeof callback === "function" ? callback(error) : void 0; + } else { + return fs.writeFile(filePath, content, options, callback); + } + }); + }, + copy: function(sourcePath, destinationPath, done) { + return mkdirp(path.dirname(destinationPath), function(error) { + var destinationStream, sourceStream; + if (error != null) { + if (typeof done === "function") { + done(error); + } + return; + } + sourceStream = fs.createReadStream(sourcePath); + sourceStream.on('error', function(error) { + if (typeof done === "function") { + done(error); + } + return done = null; + }); + destinationStream = fs.createWriteStream(destinationPath); + destinationStream.on('error', function(error) { + if (typeof done === "function") { + done(error); + } + return done = null; + }); + destinationStream.on('close', function() { + if (typeof done === "function") { + done(); + } + return done = null; + }); + return sourceStream.pipe(destinationStream); + }); + }, + copySync: function(sourcePath, destinationPath) { + var content, destinationFilePath, source, sourceFilePath, sources, _i, _len, _results; + sources = fs.readdirSync(sourcePath); + mkdirp.sync(destinationPath); + _results = []; + for (_i = 0, _len = sources.length; _i < _len; _i++) { + source = sources[_i]; + sourceFilePath = path.join(sourcePath, source); + destinationFilePath = path.join(destinationPath, source); + if (fsPlus.isDirectorySync(sourceFilePath)) { + _results.push(fsPlus.copySync(sourceFilePath, destinationFilePath)); + } else { + content = fs.readFileSync(sourceFilePath); + _results.push(fs.writeFileSync(destinationFilePath, content)); + } + } + return _results; + }, + makeTreeSync: function(directoryPath) { + if (!fsPlus.isDirectorySync(directoryPath)) { + return mkdirp.sync(directoryPath); + } + }, + makeTree: function(directoryPath, callback) { + return fsPlus.isDirectory(directoryPath, function(exists) { + if (exists) { + return typeof callback === "function" ? callback() : void 0; + } + return mkdirp(directoryPath, function(error) { + return typeof callback === "function" ? callback(error) : void 0; + }); + }); + }, + traverseTreeSync: function(rootPath, onFile, onDirectory) { + var traverse; + if (onDirectory == null) { + onDirectory = onFile; + } + if (!fsPlus.isDirectorySync(rootPath)) { + return; + } + traverse = function(directoryPath, onFile, onDirectory) { + var childPath, file, linkStats, stats, _i, _len, _ref; + _ref = fs.readdirSync(directoryPath); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + file = _ref[_i]; + childPath = path.join(directoryPath, file); + stats = fs.lstatSync(childPath); + if (stats.isSymbolicLink()) { + if (linkStats = statSyncNoException(childPath)) { + stats = linkStats; + } + } + if (stats.isDirectory()) { + if (onDirectory(childPath)) { + traverse(childPath, onFile, onDirectory); + } + } else if (stats.isFile()) { + onFile(childPath); + } + } + return void 0; + }; + return traverse(rootPath, onFile, onDirectory); + }, + traverseTree: function(rootPath, onFile, onDirectory, onDone) { + return fs.readdir(rootPath, function(error, files) { + var file, queue, _i, _len, _results; + if (error) { + return typeof onDone === "function" ? onDone() : void 0; + } else { + queue = async.queue(function(childPath, callback) { + return fs.stat(childPath, function(error, stats) { + if (error) { + return callback(error); + } else if (stats.isFile()) { + onFile(childPath); + return callback(); + } else if (stats.isDirectory()) { + if (onDirectory(childPath)) { + return fs.readdir(childPath, function(error, files) { + var file, _i, _len; + if (error) { + return callback(error); + } else { + for (_i = 0, _len = files.length; _i < _len; _i++) { + file = files[_i]; + queue.unshift(path.join(childPath, file)); + } + return callback(); + } + }); + } else { + return callback(); + } + } else { + return callback(); + } + }); + }); + queue.concurrency = 1; + queue.drain = onDone; + _results = []; + for (_i = 0, _len = files.length; _i < _len; _i++) { + file = files[_i]; + _results.push(queue.push(path.join(rootPath, file))); + } + return _results; + } + }); + }, + md5ForPath: function(pathToDigest) { + var contents; + contents = fs.readFileSync(pathToDigest); + return require('crypto').createHash('md5').update(contents).digest('hex'); + }, + resolve: function() { + var args, candidatePath, extensions, loadPath, loadPaths, pathToResolve, resolvedPath, _i, _len, _ref; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + if (_.isArray(_.last(args))) { + extensions = args.pop(); + } + pathToResolve = (_ref = args.pop()) != null ? _ref.toString() : void 0; + loadPaths = args; + if (!pathToResolve) { + return void 0; + } + if (fsPlus.isAbsolute(pathToResolve)) { + if (extensions && (resolvedPath = fsPlus.resolveExtension(pathToResolve, extensions))) { + return resolvedPath; + } else { + if (fsPlus.existsSync(pathToResolve)) { + return pathToResolve; + } + } + } + for (_i = 0, _len = loadPaths.length; _i < _len; _i++) { + loadPath = loadPaths[_i]; + candidatePath = path.join(loadPath, pathToResolve); + if (extensions) { + if (resolvedPath = fsPlus.resolveExtension(candidatePath, extensions)) { + return resolvedPath; + } + } else { + if (fsPlus.existsSync(candidatePath)) { + return fsPlus.absolute(candidatePath); + } + } + } + return void 0; + }, + resolveOnLoadPath: function() { + var args, loadPaths; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + loadPaths = Module.globalPaths.concat(module.paths); + return fsPlus.resolve.apply(fsPlus, __slice.call(loadPaths).concat(__slice.call(args))); + }, + resolveExtension: function(pathToResolve, extensions) { + var extension, pathWithExtension, _i, _len; + for (_i = 0, _len = extensions.length; _i < _len; _i++) { + extension = extensions[_i]; + if (extension === "") { + if (fsPlus.existsSync(pathToResolve)) { + return fsPlus.absolute(pathToResolve); + } + } else { + pathWithExtension = pathToResolve + "." + extension.replace(/^\./, ""); + if (fsPlus.existsSync(pathWithExtension)) { + return fsPlus.absolute(pathWithExtension); + } + } + } + return void 0; + }, + isCompressedExtension: function(ext) { + return COMPRESSED_EXTENSIONS.hasOwnProperty(ext); + }, + isImageExtension: function(ext) { + return IMAGE_EXTENSIONS.hasOwnProperty(ext); + }, + isPdfExtension: function(ext) { + return ext === '.pdf'; + }, + isBinaryExtension: function(ext) { + return BINARY_EXTENSIONS.hasOwnProperty(ext); + }, + isReadmePath: function(readmePath) { + var base, extension; + extension = path.extname(readmePath); + base = path.basename(readmePath, extension).toLowerCase(); + return base === 'readme' && (extension === '' || fsPlus.isMarkdownExtension(extension)); + }, + isMarkdownExtension: function(ext) { + return MARKDOWN_EXTENSIONS.hasOwnProperty(ext); + }, + isCaseInsensitive: function() { + var lowerCaseStat, upperCaseStat; + if (fsPlus.caseInsensitiveFs == null) { + lowerCaseStat = statSyncNoException(process.execPath.toLowerCase()); + upperCaseStat = statSyncNoException(process.execPath.toUpperCase()); + if (lowerCaseStat && upperCaseStat) { + fsPlus.caseInsensitiveFs = lowerCaseStat.dev === upperCaseStat.dev && lowerCaseStat.ino === upperCaseStat.ino; + } else { + fsPlus.caseInsensitiveFs = false; + } + } + return fsPlus.caseInsensitiveFs; + }, + isCaseSensitive: function() { + return !fsPlus.isCaseInsensitive(); + } + }; + + statSyncNoException = fs.statSyncNoException, lstatSyncNoException = fs.lstatSyncNoException; + + if (statSyncNoException == null) { + statSyncNoException = function() { + var args, error; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + try { + return fs.statSync.apply(fs, args); + } catch (_error) { + error = _error; + return false; + } + }; + } + + if (lstatSyncNoException == null) { + lstatSyncNoException = function() { + var args, error; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + try { + return fs.lstatSync.apply(fs, args); + } catch (_error) { + error = _error; + return false; + } + }; + } + + BINARY_EXTENSIONS = { + '.DS_Store': true, + '.a': true, + '.exe': true, + '.o': true, + '.pyc': true, + '.pyo': true, + '.so': true, + '.woff': true + }; + + COMPRESSED_EXTENSIONS = { + '.bz2': true, + '.egg': true, + '.epub': true, + '.gz': true, + '.jar': true, + '.lz': true, + '.lzma': true, + '.lzo': true, + '.tar': true, + '.tgz': true, + '.war': true, + '.whl': true, + '.xpi': true, + '.xz': true, + '.z': true, + '.zip': true + }; + + IMAGE_EXTENSIONS = { + '.gif': true, + '.ico': true, + '.jpeg': true, + '.jpg': true, + '.png': true, + '.tiff': true, + '.webp': true + }; + + MARKDOWN_EXTENSIONS = { + '.markdown': true, + '.md': true, + '.mdown': true, + '.mkd': true, + '.mkdown': true, + '.rmd': true, + '.ron': true + }; + + isPathValid = function(pathToCheck) { + return (pathToCheck != null) && typeof pathToCheck === 'string' && pathToCheck.length > 0; + }; + + isMoveTargetValid = function(source, target, callback) { + return fs.stat(source, function(oldErr, oldStat) { + if (oldErr) { + callback(oldErr); + return; + } + return fs.stat(target, function(newErr, newStat) { + if (newErr && newErr.code === 'ENOENT') { + callback(void 0, true); + return; + } + return callback(void 0, source.toLowerCase() === target.toLowerCase() && oldStat.dev === newStat.dev && oldStat.ino === newStat.ino); + }); + }); + }; + + isMoveTargetValidSync = function(source, target) { + var newStat, oldStat; + oldStat = statSyncNoException(source); + newStat = statSyncNoException(target); + if (!(oldStat && newStat)) { + return true; + } + return source.toLowerCase() === target.toLowerCase() && oldStat.dev === newStat.dev && oldStat.ino === newStat.ino; + }; + + module.exports = _.extend({}, fs, fsPlus); + +}).call(this); |