| 'use strict'; | 
|   | 
| var path = require('path'); | 
| var inspect = require('util').inspect; | 
|   | 
| function assertPath(path) { | 
|   if (typeof path !== 'string') { | 
|     throw new TypeError('Path must be a string. Received ' + inspect(path)); | 
|   } | 
| } | 
|   | 
| function posix(path) { | 
|   assertPath(path); | 
|   if (path.length === 0) | 
|     return '.'; | 
|   var code = path.charCodeAt(0); | 
|   var hasRoot = (code === 47/*/*/); | 
|   var end = -1; | 
|   var matchedSlash = true; | 
|   for (var i = path.length - 1; i >= 1; --i) { | 
|     code = path.charCodeAt(i); | 
|     if (code === 47/*/*/) { | 
|       if (!matchedSlash) { | 
|         end = i; | 
|         break; | 
|       } | 
|     } else { | 
|       // We saw the first non-path separator | 
|       matchedSlash = false; | 
|     } | 
|   } | 
|   | 
|   if (end === -1) | 
|     return hasRoot ? '/' : '.'; | 
|   if (hasRoot && end === 1) | 
|     return '//'; | 
|   return path.slice(0, end); | 
| } | 
|   | 
| function win32(path) { | 
|   assertPath(path); | 
|   var len = path.length; | 
|   if (len === 0) | 
|     return '.'; | 
|   var rootEnd = -1; | 
|   var end = -1; | 
|   var matchedSlash = true; | 
|   var offset = 0; | 
|   var code = path.charCodeAt(0); | 
|   | 
|   // Try to match a root | 
|   if (len > 1) { | 
|     if (code === 47/*/*/ || code === 92/*\*/) { | 
|       // Possible UNC root | 
|   | 
|       rootEnd = offset = 1; | 
|   | 
|       code = path.charCodeAt(1); | 
|       if (code === 47/*/*/ || code === 92/*\*/) { | 
|         // Matched double path separator at beginning | 
|         var j = 2; | 
|         var last = j; | 
|         // Match 1 or more non-path separators | 
|         for (; j < len; ++j) { | 
|           code = path.charCodeAt(j); | 
|           if (code === 47/*/*/ || code === 92/*\*/) | 
|             break; | 
|         } | 
|         if (j < len && j !== last) { | 
|           // Matched! | 
|           last = j; | 
|           // Match 1 or more path separators | 
|           for (; j < len; ++j) { | 
|             code = path.charCodeAt(j); | 
|             if (code !== 47/*/*/ && code !== 92/*\*/) | 
|               break; | 
|           } | 
|           if (j < len && j !== last) { | 
|             // Matched! | 
|             last = j; | 
|             // Match 1 or more non-path separators | 
|             for (; j < len; ++j) { | 
|               code = path.charCodeAt(j); | 
|               if (code === 47/*/*/ || code === 92/*\*/) | 
|                 break; | 
|             } | 
|             if (j === len) { | 
|               // We matched a UNC root only | 
|               return path; | 
|             } | 
|             if (j !== last) { | 
|               // We matched a UNC root with leftovers | 
|   | 
|               // Offset by 1 to include the separator after the UNC root to | 
|               // treat it as a "normal root" on top of a (UNC) root | 
|               rootEnd = offset = j + 1; | 
|             } | 
|           } | 
|         } | 
|       } | 
|     } else if ((code >= 65/*A*/ && code <= 90/*Z*/) || | 
|                (code >= 97/*a*/ && code <= 122/*z*/)) { | 
|       // Possible device root | 
|   | 
|       code = path.charCodeAt(1); | 
|       if (path.charCodeAt(1) === 58/*:*/) { | 
|         rootEnd = offset = 2; | 
|         if (len > 2) { | 
|           code = path.charCodeAt(2); | 
|           if (code === 47/*/*/ || code === 92/*\*/) | 
|             rootEnd = offset = 3; | 
|         } | 
|       } | 
|     } | 
|   } else if (code === 47/*/*/ || code === 92/*\*/) { | 
|     return path[0]; | 
|   } | 
|   | 
|   for (var i = len - 1; i >= offset; --i) { | 
|     code = path.charCodeAt(i); | 
|     if (code === 47/*/*/ || code === 92/*\*/) { | 
|       if (!matchedSlash) { | 
|         end = i; | 
|         break; | 
|       } | 
|     } else { | 
|       // We saw the first non-path separator | 
|       matchedSlash = false; | 
|     } | 
|   } | 
|   | 
|   if (end === -1) { | 
|     if (rootEnd === -1) | 
|       return '.'; | 
|     else | 
|       end = rootEnd; | 
|   } | 
|   return path.slice(0, end); | 
| } | 
|   | 
| module.exports = process.platform === 'win32' ? win32 : posix; | 
| module.exports.posix = posix; | 
| module.exports.win32 = win32; |