48 lines
862 B
JavaScript
48 lines
862 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var isRelative = require('is-relative');
|
||
|
var isWindows = require('is-windows');
|
||
|
|
||
|
/**
|
||
|
* Expose `isAbsolute`
|
||
|
*/
|
||
|
|
||
|
module.exports = isAbsolute;
|
||
|
|
||
|
/**
|
||
|
* Returns true if a file path is absolute.
|
||
|
*
|
||
|
* @param {String} `fp`
|
||
|
* @return {Boolean}
|
||
|
*/
|
||
|
|
||
|
function isAbsolute(fp) {
|
||
|
if (typeof fp !== 'string') {
|
||
|
throw new TypeError('isAbsolute expects a string.');
|
||
|
}
|
||
|
return isWindows() ? isAbsolute.win32(fp) : isAbsolute.posix(fp);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test posix paths.
|
||
|
*/
|
||
|
|
||
|
isAbsolute.posix = function posixPath(fp) {
|
||
|
return fp.charAt(0) === '/';
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Test windows paths.
|
||
|
*/
|
||
|
|
||
|
isAbsolute.win32 = function win32(fp) {
|
||
|
if (/[a-z]/i.test(fp.charAt(0)) && fp.charAt(1) === ':' && fp.charAt(2) === '\\') {
|
||
|
return true;
|
||
|
}
|
||
|
// Microsoft Azure absolute filepath
|
||
|
if (fp.slice(0, 2) === '\\\\') {
|
||
|
return true;
|
||
|
}
|
||
|
return !isRelative(fp);
|
||
|
};
|