You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					171 lines
				
				4.6 KiB
			
		
		
			
		
	
	
					171 lines
				
				4.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* upath http://github.com/anodynos/upath/
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* A proxy to `path`, replacing `\` with `/` for all results & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.
							 | 
						||
| 
								 | 
							
								* Version 1.2.0 - Compiled on 2019-09-02 23:33:57
							 | 
						||
| 
								 | 
							
								* Repository git://github.com/anodynos/upath
							 | 
						||
| 
								 | 
							
								* Copyright(c) 2019 Angelos Pikoulas <agelos.pikoulas@gmail.com>
							 | 
						||
| 
								 | 
							
								* License MIT
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Generated by uRequire v0.7.0-beta.33 target: 'lib' template: 'nodejs'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var VERSION = '1.2.0'; // injected by urequire-rc-inject-version
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var extraFn, extraFunctions, isFunction, isString, isValidExt, name, path, propName, propValue, toUnix, upath, slice = [].slice, indexOf = [].indexOf || function (item) {
							 | 
						||
| 
								 | 
							
								    for (var i = 0, l = this.length; i < l; i++) {
							 | 
						||
| 
								 | 
							
								      if (i in this && this[i] === item)
							 | 
						||
| 
								 | 
							
								        return i;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return -1;
							 | 
						||
| 
								 | 
							
								  }, hasProp = {}.hasOwnProperty;
							 | 
						||
| 
								 | 
							
								path = require("path");
							 | 
						||
| 
								 | 
							
								isFunction = function (val) {
							 | 
						||
| 
								 | 
							
								  return val instanceof Function;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								isString = function (val) {
							 | 
						||
| 
								 | 
							
								  return typeof val === "string" || !!val && typeof val === "object" && Object.prototype.toString.call(val) === "[object String]";
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								upath = exports;
							 | 
						||
| 
								 | 
							
								upath.VERSION = typeof VERSION !== "undefined" && VERSION !== null ? VERSION : "NO-VERSION";
							 | 
						||
| 
								 | 
							
								toUnix = function (p) {
							 | 
						||
| 
								 | 
							
								  var double;
							 | 
						||
| 
								 | 
							
								  p = p.replace(/\\/g, "/");
							 | 
						||
| 
								 | 
							
								  double = /\/\//;
							 | 
						||
| 
								 | 
							
								  while (p.match(double)) {
							 | 
						||
| 
								 | 
							
								    p = p.replace(double, "/");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return p;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								for (propName in path) {
							 | 
						||
| 
								 | 
							
								  propValue = path[propName];
							 | 
						||
| 
								 | 
							
								  if (isFunction(propValue)) {
							 | 
						||
| 
								 | 
							
								    upath[propName] = function (propName) {
							 | 
						||
| 
								 | 
							
								      return function () {
							 | 
						||
| 
								 | 
							
								        var args, result;
							 | 
						||
| 
								 | 
							
								        args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
							 | 
						||
| 
								 | 
							
								        args = args.map(function (p) {
							 | 
						||
| 
								 | 
							
								          if (isString(p)) {
							 | 
						||
| 
								 | 
							
								            return toUnix(p);
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            return p;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        result = path[propName].apply(path, args);
							 | 
						||
| 
								 | 
							
								        if (isString(result)) {
							 | 
						||
| 
								 | 
							
								          return toUnix(result);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          return result;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    }(propName);
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    upath[propName] = propValue;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								upath.sep = "/";
							 | 
						||
| 
								 | 
							
								extraFunctions = {
							 | 
						||
| 
								 | 
							
								  toUnix: toUnix,
							 | 
						||
| 
								 | 
							
								  normalizeSafe: function (p) {
							 | 
						||
| 
								 | 
							
								    p = toUnix(p);
							 | 
						||
| 
								 | 
							
								    if (p.startsWith("./")) {
							 | 
						||
| 
								 | 
							
								      if (p.startsWith("./..") || p === "./") {
							 | 
						||
| 
								 | 
							
								        return upath.normalize(p);
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return "./" + upath.normalize(p);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      return upath.normalize(p);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  normalizeTrim: function (p) {
							 | 
						||
| 
								 | 
							
								    p = upath.normalizeSafe(p);
							 | 
						||
| 
								 | 
							
								    if (p.endsWith("/")) {
							 | 
						||
| 
								 | 
							
								      return p.slice(0, +(p.length - 2) + 1 || 9000000000);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      return p;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  joinSafe: function () {
							 | 
						||
| 
								 | 
							
								    var p, result;
							 | 
						||
| 
								 | 
							
								    p = 1 <= arguments.length ? slice.call(arguments, 0) : [];
							 | 
						||
| 
								 | 
							
								    result = upath.join.apply(null, p);
							 | 
						||
| 
								 | 
							
								    if (p[0].startsWith("./") && !result.startsWith("./")) {
							 | 
						||
| 
								 | 
							
								      result = "./" + result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  addExt: function (file, ext) {
							 | 
						||
| 
								 | 
							
								    if (!ext) {
							 | 
						||
| 
								 | 
							
								      return file;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      if (ext[0] !== ".") {
							 | 
						||
| 
								 | 
							
								        ext = "." + ext;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return file + (file.endsWith(ext) ? "" : ext);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  trimExt: function (filename, ignoreExts, maxSize) {
							 | 
						||
| 
								 | 
							
								    var oldExt;
							 | 
						||
| 
								 | 
							
								    if (maxSize == null) {
							 | 
						||
| 
								 | 
							
								      maxSize = 7;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    oldExt = upath.extname(filename);
							 | 
						||
| 
								 | 
							
								    if (isValidExt(oldExt, ignoreExts, maxSize)) {
							 | 
						||
| 
								 | 
							
								      return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9000000000);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      return filename;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  removeExt: function (filename, ext) {
							 | 
						||
| 
								 | 
							
								    if (!ext) {
							 | 
						||
| 
								 | 
							
								      return filename;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      ext = ext[0] === "." ? ext : "." + ext;
							 | 
						||
| 
								 | 
							
								      if (upath.extname(filename) === ext) {
							 | 
						||
| 
								 | 
							
								        return upath.trimExt(filename);
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return filename;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  changeExt: function (filename, ext, ignoreExts, maxSize) {
							 | 
						||
| 
								 | 
							
								    if (maxSize == null) {
							 | 
						||
| 
								 | 
							
								      maxSize = 7;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? "" : ext[0] === "." ? ext : "." + ext);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  defaultExt: function (filename, ext, ignoreExts, maxSize) {
							 | 
						||
| 
								 | 
							
								    var oldExt;
							 | 
						||
| 
								 | 
							
								    if (maxSize == null) {
							 | 
						||
| 
								 | 
							
								      maxSize = 7;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    oldExt = upath.extname(filename);
							 | 
						||
| 
								 | 
							
								    if (isValidExt(oldExt, ignoreExts, maxSize)) {
							 | 
						||
| 
								 | 
							
								      return filename;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      return upath.addExt(filename, ext);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								isValidExt = function (ext, ignoreExts, maxSize) {
							 | 
						||
| 
								 | 
							
								  if (ignoreExts == null) {
							 | 
						||
| 
								 | 
							
								    ignoreExts = [];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function (e) {
							 | 
						||
| 
								 | 
							
								    return (e && e[0] !== "." ? "." : "") + e;
							 | 
						||
| 
								 | 
							
								  }), ext) < 0;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								for (name in extraFunctions) {
							 | 
						||
| 
								 | 
							
								  if (!hasProp.call(extraFunctions, name))
							 | 
						||
| 
								 | 
							
								    continue;
							 | 
						||
| 
								 | 
							
								  extraFn = extraFunctions[name];
							 | 
						||
| 
								 | 
							
								  if (upath[name] !== void 0) {
							 | 
						||
| 
								 | 
							
								    throw new Error("path." + name + " already exists.");
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    upath[name] = extraFn;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;
							 |