@@ -102983,29 +102983,14 @@ function fresh (url, parsedUrl) {
102983
102983
102984
102984
var isWindows = process.platform === 'win32';
102985
102985
102986
- // Regex to split a windows path into three parts: [*, device, slash,
102987
- // tail] windows-only
102988
- var splitDeviceRe =
102989
- /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
102990
-
102991
- // Regex to split the tail part of the above into [*, dir, basename, ext]
102992
- var splitTailRe =
102993
- /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/;
102986
+ // Regex to split a windows path into into [dir, root, basename, name, ext]
102987
+ var splitWindowsRe =
102988
+ /^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/;
102994
102989
102995
102990
var win32 = {};
102996
102991
102997
- // Function to split a filename into [root, dir, basename, ext]
102998
102992
function win32SplitPath(filename) {
102999
- // Separate device+slash from tail
103000
- var result = splitDeviceRe.exec(filename),
103001
- device = (result[1] || '') + (result[2] || ''),
103002
- tail = result[3] || '';
103003
- // Split the tail into dir, basename and extension
103004
- var result2 = splitTailRe.exec(tail),
103005
- dir = result2[1],
103006
- basename = result2[2],
103007
- ext = result2[3];
103008
- return [device, dir, basename, ext];
102993
+ return splitWindowsRe.exec(filename).slice(1);
103009
102994
}
103010
102995
103011
102996
win32.parse = function(pathString) {
@@ -103015,24 +103000,24 @@ win32.parse = function(pathString) {
103015
103000
);
103016
103001
}
103017
103002
var allParts = win32SplitPath(pathString);
103018
- if (!allParts || allParts.length !== 4 ) {
103003
+ if (!allParts || allParts.length !== 5 ) {
103019
103004
throw new TypeError("Invalid path '" + pathString + "'");
103020
103005
}
103021
103006
return {
103022
- root: allParts[0 ],
103023
- dir: allParts[0] + allParts[1].slice(0, -1),
103007
+ root: allParts[1 ],
103008
+ dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0 ].slice(0, -1),
103024
103009
base: allParts[2],
103025
- ext: allParts[3 ],
103026
- name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
103010
+ ext: allParts[4 ],
103011
+ name: allParts[3]
103027
103012
};
103028
103013
};
103029
103014
103030
103015
103031
103016
103032
- // Split a filename into [root, dir , basename, ext], unix version
103017
+ // Split a filename into [dir, root , basename, name , ext], unix version
103033
103018
// 'root' is just a slash, or nothing.
103034
103019
var splitPathRe =
103035
- /^(\/?|)([\s\S]*?)((?: \.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?: [\/]*) $/;
103020
+ /^(( \/?)(?:[^\/]*\/)*)(( \.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/;
103036
103021
var posix = {};
103037
103022
103038
103023
@@ -103048,19 +103033,16 @@ posix.parse = function(pathString) {
103048
103033
);
103049
103034
}
103050
103035
var allParts = posixSplitPath(pathString);
103051
- if (!allParts || allParts.length !== 4 ) {
103036
+ if (!allParts || allParts.length !== 5 ) {
103052
103037
throw new TypeError("Invalid path '" + pathString + "'");
103053
103038
}
103054
- allParts[1] = allParts[1] || '';
103055
- allParts[2] = allParts[2] || '';
103056
- allParts[3] = allParts[3] || '';
103057
-
103039
+
103058
103040
return {
103059
- root: allParts[0 ],
103060
- dir: allParts[0] + allParts[1] .slice(0, -1),
103041
+ root: allParts[1 ],
103042
+ dir: allParts[0].slice(0, -1),
103061
103043
base: allParts[2],
103062
- ext: allParts[3 ],
103063
- name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
103044
+ ext: allParts[4 ],
103045
+ name: allParts[3],
103064
103046
};
103065
103047
};
103066
103048
0 commit comments