| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | '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;
 |