Remove deprecated scripts for adding head-matter to wt_config.xml, including Python and Bash implementations, to streamline configuration management.
This commit is contained in:
11
node_modules/bare-path/lib/constants.js
generated
vendored
Normal file
11
node_modules/bare-path/lib/constants.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
module.exports = {
|
||||
CHAR_UPPERCASE_A: 0x41,
|
||||
CHAR_LOWERCASE_A: 0x61,
|
||||
CHAR_UPPERCASE_Z: 0x5a,
|
||||
CHAR_LOWERCASE_Z: 0x7a,
|
||||
CHAR_DOT: 0x2e,
|
||||
CHAR_FORWARD_SLASH: 0x2f,
|
||||
CHAR_BACKWARD_SLASH: 0x5c,
|
||||
CHAR_COLON: 0x3a,
|
||||
CHAR_QUESTION_MARK: 0x3f
|
||||
}
|
||||
242
node_modules/bare-path/lib/posix.js
generated
vendored
Normal file
242
node_modules/bare-path/lib/posix.js
generated
vendored
Normal file
@@ -0,0 +1,242 @@
|
||||
const os = require('bare-os')
|
||||
|
||||
const { normalizeString } = require('./shared')
|
||||
const {
|
||||
CHAR_DOT,
|
||||
CHAR_FORWARD_SLASH
|
||||
} = require('./constants')
|
||||
|
||||
function isPosixPathSeparator (code) {
|
||||
return code === CHAR_FORWARD_SLASH
|
||||
}
|
||||
|
||||
exports.win32 = require('./win32')
|
||||
exports.posix = exports
|
||||
|
||||
exports.sep = '/'
|
||||
exports.delimiter = ':'
|
||||
|
||||
exports.resolve = function resolve (...args) {
|
||||
let resolvedPath = ''
|
||||
let resolvedAbsolute = false
|
||||
|
||||
for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
||||
const path = i >= 0 ? args[i] : os.cwd()
|
||||
|
||||
if (path.length === 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
resolvedPath = `${path}/${resolvedPath}`
|
||||
resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH
|
||||
}
|
||||
|
||||
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, '/', isPosixPathSeparator)
|
||||
|
||||
if (resolvedAbsolute) {
|
||||
return `/${resolvedPath}`
|
||||
}
|
||||
|
||||
return resolvedPath.length > 0 ? resolvedPath : '.'
|
||||
}
|
||||
|
||||
exports.normalize = function normalize (path) {
|
||||
if (path.length === 0) return '.'
|
||||
|
||||
const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH
|
||||
const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH
|
||||
|
||||
path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator)
|
||||
|
||||
if (path.length === 0) {
|
||||
if (isAbsolute) return '/'
|
||||
return trailingSeparator ? './' : '.'
|
||||
}
|
||||
|
||||
if (trailingSeparator) path += '/'
|
||||
|
||||
return isAbsolute ? `/${path}` : path
|
||||
}
|
||||
|
||||
exports.isAbsolute = function isAbsolute (path) {
|
||||
return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH
|
||||
}
|
||||
|
||||
exports.join = function join (...args) {
|
||||
if (args.length === 0) return '.'
|
||||
let joined
|
||||
for (let i = 0; i < args.length; ++i) {
|
||||
const arg = args[i]
|
||||
if (arg.length > 0) {
|
||||
if (joined === undefined) joined = arg
|
||||
else joined += `/${arg}`
|
||||
}
|
||||
}
|
||||
if (joined === undefined) return '.'
|
||||
return exports.normalize(joined)
|
||||
}
|
||||
|
||||
exports.relative = function relative (from, to) {
|
||||
if (from === to) return ''
|
||||
|
||||
from = exports.resolve(from)
|
||||
to = exports.resolve(to)
|
||||
|
||||
if (from === to) return ''
|
||||
|
||||
const fromStart = 1
|
||||
const fromEnd = from.length
|
||||
const fromLen = fromEnd - fromStart
|
||||
const toStart = 1
|
||||
const toLen = to.length - toStart
|
||||
|
||||
const length = (fromLen < toLen ? fromLen : toLen)
|
||||
let lastCommonSep = -1
|
||||
let i = 0
|
||||
for (; i < length; i++) {
|
||||
const fromCode = from.charCodeAt(fromStart + i)
|
||||
if (fromCode !== to.charCodeAt(toStart + i)) {
|
||||
break
|
||||
} else if (fromCode === CHAR_FORWARD_SLASH) {
|
||||
lastCommonSep = i
|
||||
}
|
||||
}
|
||||
if (i === length) {
|
||||
if (toLen > length) {
|
||||
if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {
|
||||
return to.substring(toStart + i + 1)
|
||||
}
|
||||
if (i === 0) {
|
||||
return to.substring(toStart + i)
|
||||
}
|
||||
} else if (fromLen > length) {
|
||||
if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {
|
||||
lastCommonSep = i
|
||||
} else if (i === 0) {
|
||||
lastCommonSep = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let out = ''
|
||||
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
|
||||
if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {
|
||||
out += out.length === 0 ? '..' : '/..'
|
||||
}
|
||||
}
|
||||
|
||||
return `${out}${to.substring(toStart + lastCommonSep)}`
|
||||
}
|
||||
|
||||
exports.toNamespacedPath = function toNamespacedPath (path) {
|
||||
return path
|
||||
}
|
||||
|
||||
exports.dirname = function dirname (path) {
|
||||
if (path.length === 0) return '.'
|
||||
const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
for (let i = path.length - 1; i >= 1; --i) {
|
||||
if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {
|
||||
if (!matchedSlash) {
|
||||
end = i
|
||||
break
|
||||
}
|
||||
} else {
|
||||
matchedSlash = false
|
||||
}
|
||||
}
|
||||
|
||||
if (end === -1) return hasRoot ? '/' : '.'
|
||||
if (hasRoot && end === 1) return '//'
|
||||
return path.substring(0, end)
|
||||
}
|
||||
|
||||
exports.basename = function basename (path, suffix) {
|
||||
let start = 0
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
|
||||
if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) {
|
||||
if (suffix === path) { return '' }
|
||||
let extIdx = suffix.length - 1
|
||||
let firstNonSlashEnd = -1
|
||||
for (let i = path.length - 1; i >= 0; --i) {
|
||||
const code = path.charCodeAt(i)
|
||||
if (code === CHAR_FORWARD_SLASH) {
|
||||
if (!matchedSlash) {
|
||||
start = i + 1
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if (firstNonSlashEnd === -1) {
|
||||
matchedSlash = false
|
||||
firstNonSlashEnd = i + 1
|
||||
}
|
||||
if (extIdx >= 0) {
|
||||
if (code === suffix.charCodeAt(extIdx)) {
|
||||
if (--extIdx === -1) {
|
||||
end = i
|
||||
}
|
||||
} else {
|
||||
extIdx = -1
|
||||
end = firstNonSlashEnd
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (start === end) end = firstNonSlashEnd
|
||||
else if (end === -1) end = path.length
|
||||
return path.substring(start, end)
|
||||
}
|
||||
|
||||
for (let i = path.length - 1; i >= 0; --i) {
|
||||
if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {
|
||||
if (!matchedSlash) {
|
||||
start = i + 1
|
||||
break
|
||||
}
|
||||
} else if (end === -1) {
|
||||
matchedSlash = false
|
||||
end = i + 1
|
||||
}
|
||||
}
|
||||
|
||||
if (end === -1) return ''
|
||||
return path.substring(start, end)
|
||||
}
|
||||
|
||||
exports.extname = function extname (path) {
|
||||
let startDot = -1
|
||||
let startPart = 0
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
let preDotState = 0
|
||||
for (let i = path.length - 1; i >= 0; --i) {
|
||||
const code = path.charCodeAt(i)
|
||||
if (code === CHAR_FORWARD_SLASH) {
|
||||
if (!matchedSlash) {
|
||||
startPart = i + 1
|
||||
break
|
||||
}
|
||||
continue
|
||||
}
|
||||
if (end === -1) {
|
||||
matchedSlash = false
|
||||
end = i + 1
|
||||
}
|
||||
if (code === CHAR_DOT) {
|
||||
if (startDot === -1) startDot = i
|
||||
else if (preDotState !== 1) preDotState = 1
|
||||
} else if (startDot !== -1) {
|
||||
preDotState = -1
|
||||
}
|
||||
}
|
||||
|
||||
if (startDot === -1 || end === -1 || preDotState === 0 || (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)) {
|
||||
return ''
|
||||
}
|
||||
return path.substring(startDot, end)
|
||||
}
|
||||
67
node_modules/bare-path/lib/shared.js
generated
vendored
Normal file
67
node_modules/bare-path/lib/shared.js
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
const {
|
||||
CHAR_DOT,
|
||||
CHAR_FORWARD_SLASH
|
||||
} = require('./constants')
|
||||
|
||||
exports.normalizeString = function normalizeString (path, allowAboveRoot, separator, isPathSeparator) {
|
||||
let res = ''
|
||||
let lastSegmentLength = 0
|
||||
let lastSlash = -1
|
||||
let dots = 0
|
||||
let code = 0
|
||||
for (let i = 0; i <= path.length; ++i) {
|
||||
if (i < path.length) {
|
||||
code = path.charCodeAt(i)
|
||||
} else if (isPathSeparator(code)) {
|
||||
break
|
||||
} else {
|
||||
code = CHAR_FORWARD_SLASH
|
||||
}
|
||||
|
||||
if (isPathSeparator(code)) {
|
||||
if (lastSlash === i - 1 || dots === 1) ;
|
||||
else if (dots === 2) {
|
||||
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
|
||||
if (res.length > 2) {
|
||||
const lastSlashIndex = res.lastIndexOf(separator)
|
||||
if (lastSlashIndex === -1) {
|
||||
res = ''
|
||||
lastSegmentLength = 0
|
||||
} else {
|
||||
res = res.substring(0, lastSlashIndex)
|
||||
lastSegmentLength =
|
||||
res.length - 1 - res.lastIndexOf(separator)
|
||||
}
|
||||
lastSlash = i
|
||||
dots = 0
|
||||
continue
|
||||
} else if (res.length !== 0) {
|
||||
res = ''
|
||||
lastSegmentLength = 0
|
||||
lastSlash = i
|
||||
dots = 0
|
||||
continue
|
||||
}
|
||||
}
|
||||
if (allowAboveRoot) {
|
||||
res += res.length > 0 ? `${separator}..` : '..'
|
||||
lastSegmentLength = 2
|
||||
}
|
||||
} else {
|
||||
if (res.length > 0) {
|
||||
res += `${separator}${path.substring(lastSlash + 1, i)}`
|
||||
} else {
|
||||
res = path.substring(lastSlash + 1, i)
|
||||
}
|
||||
lastSegmentLength = i - lastSlash - 1
|
||||
}
|
||||
lastSlash = i
|
||||
dots = 0
|
||||
} else if (code === CHAR_DOT && dots !== -1) {
|
||||
++dots
|
||||
} else {
|
||||
dots = -1
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
513
node_modules/bare-path/lib/win32.js
generated
vendored
Normal file
513
node_modules/bare-path/lib/win32.js
generated
vendored
Normal file
@@ -0,0 +1,513 @@
|
||||
const os = require('bare-os')
|
||||
|
||||
const { normalizeString } = require('./shared')
|
||||
const {
|
||||
CHAR_UPPERCASE_A,
|
||||
CHAR_LOWERCASE_A,
|
||||
CHAR_UPPERCASE_Z,
|
||||
CHAR_LOWERCASE_Z,
|
||||
CHAR_DOT,
|
||||
CHAR_FORWARD_SLASH,
|
||||
CHAR_BACKWARD_SLASH,
|
||||
CHAR_COLON,
|
||||
CHAR_QUESTION_MARK
|
||||
} = require('./constants')
|
||||
|
||||
function isWindowsPathSeparator (code) {
|
||||
return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH
|
||||
}
|
||||
|
||||
function isWindowsDeviceRoot (code) {
|
||||
return (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) ||
|
||||
(code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z)
|
||||
}
|
||||
|
||||
exports.posix = require('./posix')
|
||||
exports.win32 = exports
|
||||
|
||||
exports.sep = '\\'
|
||||
exports.delimiter = ';'
|
||||
|
||||
exports.resolve = function resolve (...args) {
|
||||
let resolvedDevice = ''
|
||||
let resolvedTail = ''
|
||||
let resolvedAbsolute = false
|
||||
|
||||
for (let i = args.length - 1; i >= -1; i--) {
|
||||
let path
|
||||
if (i >= 0) {
|
||||
path = args[i]
|
||||
|
||||
if (path.length === 0) continue
|
||||
} else if (resolvedDevice.length === 0) {
|
||||
path = os.cwd()
|
||||
} else {
|
||||
path = os.getEnv(`=${resolvedDevice}`) || os.cwd()
|
||||
|
||||
if (path === undefined || (path.substring(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() && path.charCodeAt(2) === CHAR_BACKWARD_SLASH)) {
|
||||
path = `${resolvedDevice}\\`
|
||||
}
|
||||
}
|
||||
|
||||
const len = path.length
|
||||
let rootEnd = 0
|
||||
let device = ''
|
||||
let isAbsolute = false
|
||||
const code = path.charCodeAt(0)
|
||||
|
||||
if (len === 1) {
|
||||
if (isWindowsPathSeparator(code)) {
|
||||
rootEnd = 1
|
||||
isAbsolute = true
|
||||
}
|
||||
} else if (isWindowsPathSeparator(code)) {
|
||||
isAbsolute = true
|
||||
|
||||
if (isWindowsPathSeparator(path.charCodeAt(1))) {
|
||||
let j = 2
|
||||
let last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
const firstPart = path.substring(last, j)
|
||||
last = j
|
||||
while (j < len && isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j === len || j !== last) {
|
||||
device = `\\\\${firstPart}\\${path.substring(last, j)}`
|
||||
rootEnd = j
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rootEnd = 1
|
||||
}
|
||||
} else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
|
||||
device = path.substring(0, 2)
|
||||
rootEnd = 2
|
||||
if (len > 2 && isWindowsPathSeparator(path.charCodeAt(2))) {
|
||||
isAbsolute = true
|
||||
rootEnd = 3
|
||||
}
|
||||
}
|
||||
|
||||
if (device.length > 0) {
|
||||
if (resolvedDevice.length > 0) {
|
||||
if (device.toLowerCase() !== resolvedDevice.toLowerCase()) { continue }
|
||||
} else {
|
||||
resolvedDevice = device
|
||||
}
|
||||
}
|
||||
|
||||
if (resolvedAbsolute) {
|
||||
if (resolvedDevice.length > 0) { break }
|
||||
} else {
|
||||
resolvedTail = `${path.substring(rootEnd)}\\${resolvedTail}`
|
||||
resolvedAbsolute = isAbsolute
|
||||
if (isAbsolute && resolvedDevice.length > 0) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\', isWindowsPathSeparator)
|
||||
|
||||
return resolvedAbsolute ? `${resolvedDevice}\\${resolvedTail}` : `${resolvedDevice}${resolvedTail}` || '.'
|
||||
}
|
||||
|
||||
exports.normalize = function normalize (path) {
|
||||
const len = path.length
|
||||
if (len === 0) return '.'
|
||||
let rootEnd = 0
|
||||
let device
|
||||
let isAbsolute = false
|
||||
const code = path.charCodeAt(0)
|
||||
|
||||
if (len === 1) {
|
||||
return code === CHAR_FORWARD_SLASH ? '\\' : path
|
||||
}
|
||||
|
||||
if (isWindowsPathSeparator(code)) {
|
||||
isAbsolute = true
|
||||
|
||||
if (isWindowsPathSeparator(path.charCodeAt(1))) {
|
||||
let j = 2
|
||||
let last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
const firstPart = path.substring(last, j)
|
||||
last = j
|
||||
while (j < len && isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j === len) {
|
||||
return `\\\\${firstPart}\\${path.substring(last)}\\`
|
||||
}
|
||||
if (j !== last) {
|
||||
device = `\\\\${firstPart}\\${path.substring(last, j)}`
|
||||
rootEnd = j
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rootEnd = 1
|
||||
}
|
||||
} else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
|
||||
device = path.substring(0, 2)
|
||||
rootEnd = 2
|
||||
if (len > 2 && isWindowsPathSeparator(path.charCodeAt(2))) {
|
||||
isAbsolute = true
|
||||
rootEnd = 3
|
||||
}
|
||||
}
|
||||
|
||||
let tail = rootEnd < len ? normalizeString(path.substring(rootEnd), !isAbsolute, '\\', isWindowsPathSeparator) : ''
|
||||
if (tail.length === 0 && !isAbsolute) {
|
||||
tail = '.'
|
||||
}
|
||||
if (tail.length > 0 && isWindowsPathSeparator(path.charCodeAt(len - 1))) {
|
||||
tail += '\\'
|
||||
}
|
||||
if (device === undefined) {
|
||||
return isAbsolute ? `\\${tail}` : tail
|
||||
}
|
||||
return isAbsolute ? `${device}\\${tail}` : `${device}${tail}`
|
||||
}
|
||||
|
||||
exports.isAbsolute = function isAbsolute (path) {
|
||||
const len = path.length
|
||||
if (len === 0) return false
|
||||
|
||||
const code = path.charCodeAt(0)
|
||||
|
||||
return isWindowsPathSeparator(code) || (len > 2 && isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON && isWindowsPathSeparator(path.charCodeAt(2)))
|
||||
}
|
||||
|
||||
exports.join = function join (...args) {
|
||||
if (args.length === 0) return '.'
|
||||
|
||||
let joined
|
||||
let firstPart
|
||||
for (let i = 0; i < args.length; ++i) {
|
||||
const arg = args[i]
|
||||
if (arg.length > 0) {
|
||||
if (joined === undefined) joined = firstPart = arg
|
||||
else joined += `\\${arg}`
|
||||
}
|
||||
}
|
||||
|
||||
if (joined === undefined) return '.'
|
||||
|
||||
let needsReplace = true
|
||||
let slashCount = 0
|
||||
if (isWindowsPathSeparator(firstPart.charCodeAt(0))) {
|
||||
++slashCount
|
||||
const firstLen = firstPart.length
|
||||
if (firstLen > 1 && isWindowsPathSeparator(firstPart.charCodeAt(1))) {
|
||||
++slashCount
|
||||
if (firstLen > 2) {
|
||||
if (isWindowsPathSeparator(firstPart.charCodeAt(2))) {
|
||||
++slashCount
|
||||
} else {
|
||||
needsReplace = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (needsReplace) {
|
||||
while (slashCount < joined.length && isWindowsPathSeparator(joined.charCodeAt(slashCount))) {
|
||||
slashCount++
|
||||
}
|
||||
|
||||
if (slashCount >= 2) {
|
||||
joined = `\\${joined.substring(slashCount)}`
|
||||
}
|
||||
}
|
||||
|
||||
return exports.normalize(joined)
|
||||
}
|
||||
|
||||
exports.relative = function relative (from, to) {
|
||||
if (from === to) return ''
|
||||
|
||||
const fromOrig = exports.resolve(from)
|
||||
const toOrig = exports.resolve(to)
|
||||
|
||||
if (fromOrig === toOrig) return ''
|
||||
|
||||
from = fromOrig.toLowerCase()
|
||||
to = toOrig.toLowerCase()
|
||||
|
||||
if (from === to) return ''
|
||||
|
||||
let fromStart = 0
|
||||
while (fromStart < from.length && from.charCodeAt(fromStart) === CHAR_BACKWARD_SLASH) {
|
||||
fromStart++
|
||||
}
|
||||
let fromEnd = from.length
|
||||
while (fromEnd - 1 > fromStart && from.charCodeAt(fromEnd - 1) === CHAR_BACKWARD_SLASH) {
|
||||
fromEnd--
|
||||
}
|
||||
const fromLen = fromEnd - fromStart
|
||||
|
||||
let toStart = 0
|
||||
while (toStart < to.length && to.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {
|
||||
toStart++
|
||||
}
|
||||
let toEnd = to.length
|
||||
while (toEnd - 1 > toStart && to.charCodeAt(toEnd - 1) === CHAR_BACKWARD_SLASH) {
|
||||
toEnd--
|
||||
}
|
||||
const toLen = toEnd - toStart
|
||||
|
||||
const length = fromLen < toLen ? fromLen : toLen
|
||||
let lastCommonSep = -1
|
||||
let i = 0
|
||||
for (; i < length; i++) {
|
||||
const fromCode = from.charCodeAt(fromStart + i)
|
||||
if (fromCode !== to.charCodeAt(toStart + i)) {
|
||||
break
|
||||
} else if (fromCode === CHAR_BACKWARD_SLASH) {
|
||||
lastCommonSep = i
|
||||
}
|
||||
}
|
||||
|
||||
if (i !== length) {
|
||||
if (lastCommonSep === -1) return toOrig
|
||||
} else {
|
||||
if (toLen > length) {
|
||||
if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
|
||||
return toOrig.substring(toStart + i + 1)
|
||||
}
|
||||
if (i === 2) {
|
||||
return toOrig.substring(toStart + i)
|
||||
}
|
||||
}
|
||||
if (fromLen > length) {
|
||||
if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
|
||||
lastCommonSep = i
|
||||
} else if (i === 2) {
|
||||
lastCommonSep = 3
|
||||
}
|
||||
}
|
||||
if (lastCommonSep === -1) lastCommonSep = 0
|
||||
}
|
||||
|
||||
let out = ''
|
||||
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
|
||||
if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
|
||||
out += out.length === 0 ? '..' : '\\..'
|
||||
}
|
||||
}
|
||||
|
||||
toStart += lastCommonSep
|
||||
|
||||
if (out.length > 0) {
|
||||
return `${out}${toOrig.substring(toStart, toEnd)}`
|
||||
}
|
||||
if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {
|
||||
++toStart
|
||||
}
|
||||
return toOrig.substring(toStart, toEnd)
|
||||
}
|
||||
|
||||
exports.toNamespacedPath = function toNamespacedPath (path) {
|
||||
if (path.length === 0) return path
|
||||
|
||||
const resolvedPath = exports.resolve(path)
|
||||
|
||||
if (resolvedPath.length <= 2) return path
|
||||
|
||||
if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {
|
||||
if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {
|
||||
const code = resolvedPath.charCodeAt(2)
|
||||
if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {
|
||||
return `\\\\?\\UNC\\${resolvedPath.substring(2)}`
|
||||
}
|
||||
}
|
||||
} else if (
|
||||
isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) &&
|
||||
resolvedPath.charCodeAt(1) === CHAR_COLON &&
|
||||
resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH
|
||||
) {
|
||||
return `\\\\?\\${resolvedPath}`
|
||||
}
|
||||
|
||||
return path
|
||||
}
|
||||
|
||||
exports.dirname = function dirname (path) {
|
||||
const len = path.length
|
||||
if (len === 0) return '.'
|
||||
let rootEnd = -1
|
||||
let offset = 0
|
||||
const code = path.charCodeAt(0)
|
||||
|
||||
if (len === 1) {
|
||||
return isWindowsPathSeparator(code) ? path : '.'
|
||||
}
|
||||
|
||||
if (isWindowsPathSeparator(code)) {
|
||||
rootEnd = offset = 1
|
||||
|
||||
if (isWindowsPathSeparator(path.charCodeAt(1))) {
|
||||
let j = 2
|
||||
let last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
last = j
|
||||
while (j < len && isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j < len && j !== last) {
|
||||
last = j
|
||||
while (j < len && !isWindowsPathSeparator(path.charCodeAt(j))) {
|
||||
j++
|
||||
}
|
||||
if (j === len) {
|
||||
return path
|
||||
}
|
||||
if (j !== last) {
|
||||
rootEnd = offset = j + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
|
||||
rootEnd = len > 2 && isWindowsPathSeparator(path.charCodeAt(2)) ? 3 : 2
|
||||
offset = rootEnd
|
||||
}
|
||||
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
for (let i = len - 1; i >= offset; --i) {
|
||||
if (isWindowsPathSeparator(path.charCodeAt(i))) {
|
||||
if (!matchedSlash) {
|
||||
end = i
|
||||
break
|
||||
}
|
||||
} else {
|
||||
matchedSlash = false
|
||||
}
|
||||
}
|
||||
|
||||
if (end === -1) {
|
||||
if (rootEnd === -1) return '.'
|
||||
|
||||
end = rootEnd
|
||||
}
|
||||
return path.substring(0, end)
|
||||
}
|
||||
|
||||
exports.basename = function basename (path, suffix) {
|
||||
let start = 0
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
|
||||
if (path.length >= 2 && isWindowsDeviceRoot(path.charCodeAt(0)) && path.charCodeAt(1) === CHAR_COLON) {
|
||||
start = 2
|
||||
}
|
||||
|
||||
if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) {
|
||||
if (suffix === path) return ''
|
||||
let extIdx = suffix.length - 1
|
||||
let firstNonSlashEnd = -1
|
||||
for (let i = path.length - 1; i >= start; --i) {
|
||||
const code = path.charCodeAt(i)
|
||||
if (isWindowsPathSeparator(code)) {
|
||||
if (!matchedSlash) {
|
||||
start = i + 1
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if (firstNonSlashEnd === -1) {
|
||||
matchedSlash = false
|
||||
firstNonSlashEnd = i + 1
|
||||
}
|
||||
if (extIdx >= 0) {
|
||||
if (code === suffix.charCodeAt(extIdx)) {
|
||||
if (--extIdx === -1) {
|
||||
end = i
|
||||
}
|
||||
} else {
|
||||
extIdx = -1
|
||||
end = firstNonSlashEnd
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (start === end) end = firstNonSlashEnd
|
||||
else if (end === -1) end = path.length
|
||||
return path.substring(start, end)
|
||||
}
|
||||
for (let i = path.length - 1; i >= start; --i) {
|
||||
if (isWindowsPathSeparator(path.charCodeAt(i))) {
|
||||
if (!matchedSlash) {
|
||||
start = i + 1
|
||||
break
|
||||
}
|
||||
} else if (end === -1) {
|
||||
matchedSlash = false
|
||||
end = i + 1
|
||||
}
|
||||
}
|
||||
|
||||
if (end === -1) return ''
|
||||
return path.substring(start, end)
|
||||
}
|
||||
|
||||
exports.extname = function extname (path) {
|
||||
let start = 0
|
||||
let startDot = -1
|
||||
let startPart = 0
|
||||
let end = -1
|
||||
let matchedSlash = true
|
||||
let preDotState = 0
|
||||
|
||||
if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
|
||||
start = startPart = 2
|
||||
}
|
||||
|
||||
for (let i = path.length - 1; i >= start; --i) {
|
||||
const code = path.charCodeAt(i)
|
||||
if (isWindowsPathSeparator(code)) {
|
||||
if (!matchedSlash) {
|
||||
startPart = i + 1
|
||||
break
|
||||
}
|
||||
continue
|
||||
}
|
||||
if (end === -1) {
|
||||
matchedSlash = false
|
||||
end = i + 1
|
||||
}
|
||||
if (code === CHAR_DOT) {
|
||||
if (startDot === -1) startDot = i
|
||||
else if (preDotState !== 1) preDotState = 1
|
||||
} else if (startDot !== -1) {
|
||||
preDotState = -1
|
||||
}
|
||||
}
|
||||
|
||||
if (startDot === -1 || end === -1 || preDotState === 0 || (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)) {
|
||||
return ''
|
||||
}
|
||||
return path.substring(startDot, end)
|
||||
}
|
||||
Reference in New Issue
Block a user