提交 874fb60b 编写于 作者: J Johannes Rieken

path#join is concat and a normalize

上级 422fdbdb
...@@ -209,44 +209,29 @@ export function getRoot(path: string, sep: string = '/'): string { ...@@ -209,44 +209,29 @@ export function getRoot(path: string, sep: string = '/'): string {
return ''; return '';
} }
export function join(...parts: string[]): string { export const join: (...parts: string[]) => string = function () {
var rootLen = getRoot(parts[0]).length, let value = '';
root: string; for (let i = 0; i < arguments.length; i++) {
let part = arguments[i];
// simply preserve things like c:/, //localhost/, file:///, http://, etc if (i > 0) {
root = parts[0].substr(0, rootLen); // add the separater between two parts unless
parts[0] = parts[0].substr(rootLen); // there already is one
let last = value.charCodeAt(value.length - 1);
var allParts: string[] = [], if (last !== _slash && last !== _backslash) {
endsWithSep = /[\\\/]$/.test(parts[parts.length - 1]); let next = part.charCodeAt(0);
if (next !== _slash && next !== _backslash) {
for (var i = 0; i < parts.length; i++) {
allParts.push.apply(allParts, parts[i].split(/\/|\\/)); value += sep;
} }
}
for (var i = 0; i < allParts.length; i++) {
var part = allParts[i];
if (part === '.' || part.length === 0) {
allParts.splice(i, 1);
i -= 1;
} else if (part === '..' && !!allParts[i - 1] && allParts[i - 1] !== '..') {
allParts.splice(i - 1, 2);
i -= 2;
} }
value += part;
} }
if (endsWithSep) { return normalize(value);
allParts.push(''); };
}
var ret = allParts.join('/');
if (root) {
ret = root.replace(/\/|\\/g, '/') + ret;
}
return ret;
}
export function isUNC(path: string): boolean { export function isUNC(path: string): boolean {
if (!isWindows || !path) { if (!isWindows || !path) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册