Spaces:
Sleeping
Sleeping
; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
exports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0; | |
const os = require("os"); | |
const path = require("path"); | |
const IS_WINDOWS_PLATFORM = os.platform() === 'win32'; | |
const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\ | |
/** | |
* All non-escaped special characters. | |
* Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\ before non-special characters. | |
* Windows: (){}[], !+@ before (, ! at the beginning. | |
*/ | |
const POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g; | |
const WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()[\]{}]|^!|[!+@](?=\())/g; | |
/** | |
* The device path (\\.\ or \\?\). | |
* https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths | |
*/ | |
const DOS_DEVICE_PATH_RE = /^\\\\([.?])/; | |
/** | |
* All backslashes except those escaping special characters. | |
* Windows: !()+@{} | |
* https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions | |
*/ | |
const WINDOWS_BACKSLASHES_RE = /\\(?![!()+@[\]{}])/g; | |
/** | |
* Designed to work only with simple paths: `dir\\file`. | |
*/ | |
function unixify(filepath) { | |
return filepath.replace(/\\/g, '/'); | |
} | |
exports.unixify = unixify; | |
function makeAbsolute(cwd, filepath) { | |
return path.resolve(cwd, filepath); | |
} | |
exports.makeAbsolute = makeAbsolute; | |
function removeLeadingDotSegment(entry) { | |
// We do not use `startsWith` because this is 10x slower than current implementation for some cases. | |
// eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with | |
if (entry.charAt(0) === '.') { | |
const secondCharactery = entry.charAt(1); | |
if (secondCharactery === '/' || secondCharactery === '\\') { | |
return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT); | |
} | |
} | |
return entry; | |
} | |
exports.removeLeadingDotSegment = removeLeadingDotSegment; | |
exports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath; | |
function escapeWindowsPath(pattern) { | |
return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\$2'); | |
} | |
exports.escapeWindowsPath = escapeWindowsPath; | |
function escapePosixPath(pattern) { | |
return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\$2'); | |
} | |
exports.escapePosixPath = escapePosixPath; | |
exports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern; | |
function convertWindowsPathToPattern(filepath) { | |
return escapeWindowsPath(filepath) | |
.replace(DOS_DEVICE_PATH_RE, '//$1') | |
.replace(WINDOWS_BACKSLASHES_RE, '/'); | |
} | |
exports.convertWindowsPathToPattern = convertWindowsPathToPattern; | |
function convertPosixPathToPattern(filepath) { | |
return escapePosixPath(filepath); | |
} | |
exports.convertPosixPathToPattern = convertPosixPathToPattern; | |