path-parse
Advanced tools
Comparing version 1.0.6 to 1.0.7
52
index.js
@@ -5,25 +5,10 @@ 'use strict'; | ||
// Regex to split a windows path into three parts: [*, device, slash, | ||
// tail] windows-only | ||
var splitDeviceRe = | ||
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; | ||
// Regex to split a windows path into into [dir, root, basename, name, ext] | ||
var splitWindowsRe = | ||
/^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/; | ||
// Regex to split the tail part of the above into [*, dir, basename, ext] | ||
var splitTailRe = | ||
/^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/; | ||
var win32 = {}; | ||
// Function to split a filename into [root, dir, basename, ext] | ||
function win32SplitPath(filename) { | ||
// Separate device+slash from tail | ||
var result = splitDeviceRe.exec(filename), | ||
device = (result[1] || '') + (result[2] || ''), | ||
tail = result[3] || ''; | ||
// Split the tail into dir, basename and extension | ||
var result2 = splitTailRe.exec(tail), | ||
dir = result2[1], | ||
basename = result2[2], | ||
ext = result2[3]; | ||
return [device, dir, basename, ext]; | ||
return splitWindowsRe.exec(filename).slice(1); | ||
} | ||
@@ -38,11 +23,11 @@ | ||
var allParts = win32SplitPath(pathString); | ||
if (!allParts || allParts.length !== 4) { | ||
if (!allParts || allParts.length !== 5) { | ||
throw new TypeError("Invalid path '" + pathString + "'"); | ||
} | ||
return { | ||
root: allParts[0], | ||
dir: allParts[0] + allParts[1].slice(0, -1), | ||
root: allParts[1], | ||
dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1), | ||
base: allParts[2], | ||
ext: allParts[3], | ||
name: allParts[2].slice(0, allParts[2].length - allParts[3].length) | ||
ext: allParts[4], | ||
name: allParts[3] | ||
}; | ||
@@ -53,6 +38,6 @@ }; | ||
// Split a filename into [root, dir, basename, ext], unix version | ||
// Split a filename into [dir, root, basename, name, ext], unix version | ||
// 'root' is just a slash, or nothing. | ||
var splitPathRe = | ||
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; | ||
/^((\/?)(?:[^\/]*\/)*)((\.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/; | ||
var posix = {}; | ||
@@ -73,15 +58,12 @@ | ||
var allParts = posixSplitPath(pathString); | ||
if (!allParts || allParts.length !== 4) { | ||
if (!allParts || allParts.length !== 5) { | ||
throw new TypeError("Invalid path '" + pathString + "'"); | ||
} | ||
allParts[1] = allParts[1] || ''; | ||
allParts[2] = allParts[2] || ''; | ||
allParts[3] = allParts[3] || ''; | ||
return { | ||
root: allParts[0], | ||
dir: allParts[0] + allParts[1].slice(0, -1), | ||
root: allParts[1], | ||
dir: allParts[0].slice(0, -1), | ||
base: allParts[2], | ||
ext: allParts[3], | ||
name: allParts[2].slice(0, allParts[2].length - allParts[3].length) | ||
ext: allParts[4], | ||
name: allParts[3], | ||
}; | ||
@@ -88,0 +70,0 @@ }; |
{ | ||
"name": "path-parse", | ||
"version": "1.0.6", | ||
"version": "1.0.7", | ||
"description": "Node.js path.parse() ponyfill", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
4511
4
59