exports.join = function() { var path = ''; var vPathSep = SEP.PATH_SEP; for (var i = 0; i < arguments.length; i++) { var segment = arguments[i]; // Skip empty and invalid entries if (util.isArray(segment)) { if (segment.length === 0 && path.length === 0) { path = vPathSep } else { segment = segment.filter(Boolean).join(vPathSep); if (segment) { path += vPathSep + segment; } } continue; } else if (!util.isString(segment)) { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!segment) { continue; } if (!util.isString(segment)) { throw new TypeError('Arguments to path.join must be strings'); } if (segment) { if (!path) { path += segment; } else { path += vPathSep + segment; } } } return exports.normalize(path); };
resolveArray = exports.resolveArray = function() { var resolvedPath = [], resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? arguments[i] : "."; // Skip empty and invalid entries if (util.isArray(path)) { if (path.length === 0) { //treat empty array as root path resolvedAbsolute = true; } else { resolvedPath = path.filter(Boolean).concat(resolvedPath); resolvedAbsolute = path[0] === "" || path[0] !== '.' } continue; } else if (!util.isString(path)) { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { continue; } resolvedPath = path.split(SEP.PATH_SEP).filter(Boolean).concat(resolvedPath); //resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charAt(0) === SEP.PATH_SEP; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path //resolvedPath = normalizeArray(resolvedPath.split('/').filter(function(p) { // return !!p; //}), !resolvedAbsolute).join('/'); resolvedPath = normalizeArray(resolvedPath, !resolvedAbsolute); resolvedPath.unshift(resolvedAbsolute); return resolvedPath; };