{"version":3,"file":"paths.js","names":[],"sources":["esm/platform/file-system/paths.js"],"sourcesContent":["function uriObjectToString(path) {\n  return typeof path === \"string\" ? path : path.uri;\n}\nfunction isPathSeparator(code) {\n  return code === \"/\";\n}\nfunction normalizeString(path, allowAboveRoot, separator) {\n  let res = \"\";\n  let lastSegmentLength = 0;\n  let lastSlash = -1;\n  let dots = 0;\n  let code = \"\";\n  for (let i = 0; i <= path.length; ++i) {\n    if (i < path.length) code = path.charAt(i);\n    else if (isPathSeparator(code)) break;\n    else code = \"/\";\n    if (isPathSeparator(code)) {\n      if (lastSlash === i - 1 || dots === 1) {\n      } else if (dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charAt(res.length - 1) !== \".\" || res.charAt(res.length - 2) !== \".\") {\n          if (res.length > 2) {\n            const lastSlashIndex = res.lastIndexOf(separator);\n            if (lastSlashIndex === -1) {\n              res = \"\";\n              lastSegmentLength = 0;\n            } else {\n              res = res.slice(0, lastSlashIndex);\n              lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n            }\n            lastSlash = i;\n            dots = 0;\n            continue;\n          } else if (res.length !== 0) {\n            res = \"\";\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          res += res.length > 0 ? `${separator}..` : \"..\";\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0) res += `${separator}${path.slice(lastSlash + 1, i)}`;\n        else res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === \".\" && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\nfunction resolvePath(...args) {\n  let resolvedPath = \"\";\n  let resolvedAbsolute = false;\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : \"\";\n    if (!path || path.length === 0) continue;\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = !!(path && path.charAt(0) === \"/\");\n  }\n  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, \"/\");\n  if (resolvedAbsolute) return `/${resolvedPath}`;\n  return resolvedPath.length > 0 ? resolvedPath : \".\";\n}\nfunction normalizePath(path) {\n  if (path.length === 0) return \".\";\n  const isAbsolute = path.charAt(0) === \"/\";\n  const trailingSeparator = path.charAt(path.length - 1) === \"/\";\n  path = normalizeString(path, !isAbsolute, \"/\");\n  if (path.length === 0) {\n    if (isAbsolute) return \"/\";\n    return trailingSeparator ? \"./\" : \".\";\n  }\n  if (trailingSeparator) path += \"/\";\n  return isAbsolute ? `/${path}` : path;\n}\nfunction isAbsolutePath(path) {\n  return path.length > 0 && path.charAt(0) === \"/\";\n}\nfunction joinPaths(...args) {\n  if (args.length === 0) return \".\";\n  const path = [];\n  for (const arg of args) {\n    if (arg && arg.length > 0) path.push(arg);\n  }\n  if (path.length === 0) return \".\";\n  return normalizePath(path.join(\"/\"));\n}\nfunction relativePaths(from, to) {\n  if (from === to) return \"\";\n  from = resolvePath(from);\n  to = resolvePath(to);\n  if (from === to) return \"\";\n  const fromStart = 1;\n  const fromEnd = from.length;\n  const fromLen = fromEnd - fromStart;\n  const toStart = 1;\n  const toLen = to.length - toStart;\n  const length = fromLen < toLen ? fromLen : toLen;\n  let lastCommonSep = -1;\n  let i = 0;\n  for (; i < length; i++) {\n    const fromChar = from.charAt(fromStart + i);\n    if (fromChar !== to.charAt(toStart + i)) break;\n    else if (fromChar === \"/\") lastCommonSep = i;\n  }\n  if (i === length) {\n    if (toLen > length) {\n      if (to.charAt(toStart + i) === \"/\") return to.slice(toStart + i + 1);\n      if (i === 0) return to.slice(toStart + i);\n    } else if (fromLen > length) {\n      if (from.charAt(fromStart + i) === \"/\") lastCommonSep = i;\n      else if (i === 0) lastCommonSep = 0;\n    }\n  }\n  let out = \"\";\n  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n    if (i === fromEnd || from.charAt(i) === \"/\") {\n      out += out.length === 0 ? \"..\" : \"/..\";\n    }\n  }\n  return `${out}${to.slice(toStart + lastCommonSep)}`;\n}\nfunction dirnamePath(path) {\n  if (path.length === 0) return \".\";\n  const hasRoot = path.charAt(0) === \"/\";\n  let end = -1;\n  let matchedSlash = true;\n  for (let i = path.length - 1; i >= 1; --i) {\n    if (path.charAt(i) === \"/\") {\n      if (!matchedSlash) {\n        end = i;\n        break;\n      }\n    } else {\n      matchedSlash = false;\n    }\n  }\n  if (end === -1) return hasRoot ? \"/\" : \".\";\n  if (hasRoot && end === 1) return \"//\";\n  return path.slice(0, end);\n}\nfunction basenamePath(path, suffix) {\n  let start = 0;\n  let end = -1;\n  let matchedSlash = true;\n  if (suffix !== void 0 && suffix.length > 0 && suffix.length <= path.length) {\n    if (suffix === path) return \"\";\n    let extIdx = suffix.length - 1;\n    let firstNonSlashEnd = -1;\n    for (let i = path.length - 1; i >= 0; --i) {\n      const code = path.charAt(i);\n      if (code === \"/\") {\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else {\n        if (firstNonSlashEnd === -1) {\n          matchedSlash = false;\n          firstNonSlashEnd = i + 1;\n        }\n        if (extIdx >= 0) {\n          if (code === suffix.charAt(extIdx)) {\n            if (--extIdx === -1) end = i;\n          } else {\n            extIdx = -1;\n            end = firstNonSlashEnd;\n          }\n        }\n      }\n    }\n    if (start === end) end = firstNonSlashEnd;\n    else if (end === -1) end = path.length;\n    return path.slice(start, end);\n  }\n  for (let i = path.length - 1; i >= 0; --i) {\n    if (path.charAt(i) === \"/\") {\n      if (!matchedSlash) {\n        start = i + 1;\n        break;\n      }\n    } else if (end === -1) {\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n  if (end === -1) return \"\";\n  return path.slice(start, end);\n}\nfunction extnamePath(path) {\n  let startDot = -1;\n  let startPart = 0;\n  let end = -1;\n  let matchedSlash = true;\n  let preDotState = 0;\n  for (let i = path.length - 1; i >= 0; --i) {\n    const code = path.charAt(i);\n    if (code === \"/\") {\n      if (!matchedSlash) {\n        startPart = i + 1;\n        break;\n      }\n      continue;\n    }\n    if (end === -1) {\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === \".\") {\n      if (startDot === -1) startDot = i;\n      else if (preDotState !== 1) preDotState = 1;\n    } else if (startDot !== -1) {\n      preDotState = -1;\n    }\n  }\n  if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return \"\";\n  }\n  return path.slice(startDot, end);\n}\nfunction parsePath(path) {\n  const ret = { root: \"\", dir: \"\", base: \"\", ext: \"\", name: \"\" };\n  if (path.length === 0) return ret;\n  const isAbsolute = path.charAt(0) === \"/\";\n  let start;\n  if (isAbsolute) {\n    ret.root = \"/\";\n    start = 1;\n  } else {\n    start = 0;\n  }\n  let startDot = -1;\n  let startPart = 0;\n  let end = -1;\n  let matchedSlash = true;\n  let i = path.length - 1;\n  let preDotState = 0;\n  for (; i >= start; --i) {\n    const code = path.charAt(i);\n    if (code === \"/\") {\n      if (!matchedSlash) {\n        startPart = i + 1;\n        break;\n      }\n      continue;\n    }\n    if (end === -1) {\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === \".\") {\n      if (startDot === -1) startDot = i;\n      else if (preDotState !== 1) preDotState = 1;\n    } else if (startDot !== -1) {\n      preDotState = -1;\n    }\n  }\n  if (end !== -1) {\n    const baseStart = startPart === 0 && isAbsolute ? 1 : startPart;\n    if (startDot === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      ret.base = ret.name = path.slice(baseStart, end);\n    } else {\n      ret.name = path.slice(baseStart, startDot);\n      ret.base = path.slice(baseStart, end);\n      ret.ext = path.slice(startDot, end);\n    }\n  }\n  if (startPart > 0) ret.dir = path.slice(0, startPart - 1);\n  else if (isAbsolute) ret.dir = \"/\";\n  return ret;\n}\nconst percentRegEx = /%/g;\nconst backslashRegEx = /\\\\/g;\nconst newlineRegEx = /\\n/g;\nconst carriageReturnRegEx = /\\r/g;\nconst tabRegEx = /\\t/g;\nconst questionRegex = /\\?/g;\nconst hashRegex = /#/g;\nconst spaceRegEx = / /g;\nfunction encodePathChars(filepath) {\n  if (filepath.indexOf(\"%\") !== -1) filepath = filepath.replace(percentRegEx, \"%25\");\n  if (filepath.indexOf(\"\\\\\") !== -1) filepath = filepath.replace(backslashRegEx, \"%5C\");\n  if (filepath.indexOf(\"\\n\") !== -1) filepath = filepath.replace(newlineRegEx, \"%0A\");\n  if (filepath.indexOf(\"\\r\") !== -1) filepath = filepath.replace(carriageReturnRegEx, \"%0D\");\n  if (filepath.indexOf(\"\t\") !== -1) filepath = filepath.replace(tabRegEx, \"%09\");\n  if (filepath.indexOf(\" \") !== -1) filepath = filepath.replace(spaceRegEx, \"%20\");\n  return filepath;\n}\nfunction encodeURLChars(path) {\n  let resolved = resolvePath(path);\n  const filePathLast = path.charAt(path.length - 1);\n  if (filePathLast === \"/\" && resolved[resolved.length - 1] !== \"/\") resolved += \"/\";\n  resolved = encodePathChars(resolved);\n  if (resolved.indexOf(\"?\") !== -1) resolved = resolved.replace(questionRegex, \"%3F\");\n  if (resolved.indexOf(\"#\") !== -1) resolved = resolved.replace(hashRegex, \"%23\");\n  return resolved;\n}\nfunction isUrl(url) {\n  try {\n    return !!new URL(url);\n  } catch {\n    return false;\n  }\n}\nfunction asUrl(url) {\n  try {\n    const parsed = new URL(url);\n    parsed.hash = \"\";\n    return parsed;\n  } catch {\n    return null;\n  }\n}\nclass PathUtilities {\n  static join(...paths) {\n    const [firstSegment = \"\", ...rest] = paths.map(uriObjectToString);\n    const pathAsUrl = asUrl(firstSegment);\n    if (pathAsUrl) {\n      pathAsUrl.pathname = joinPaths(pathAsUrl.pathname, ...rest.map(encodeURLChars));\n      return pathAsUrl.toString();\n    }\n    return joinPaths(firstSegment, ...rest.map(encodeURLChars));\n  }\n  static relative(from, to) {\n    const fromString = uriObjectToString(from);\n    const toString = uriObjectToString(to);\n    const fromPath = isUrl(fromString) ? asUrl(fromString)?.pathname ?? fromString : fromString;\n    const toPath = isUrl(toString) ? asUrl(toString)?.pathname ?? toString : toString;\n    return relativePaths(fromPath, toPath);\n  }\n  static isAbsolute(path) {\n    const pathString = uriObjectToString(path);\n    if (isUrl(pathString)) return true;\n    return isAbsolutePath(pathString);\n  }\n  static normalize(path) {\n    const pathString = uriObjectToString(path);\n    const pathURL = asUrl(encodeURLChars(pathString));\n    if (pathURL) {\n      pathURL.pathname = encodeURLChars(normalizePath(decodeURIComponent(pathURL.pathname)));\n      return pathURL.toString();\n    }\n    return normalizePath(pathString);\n  }\n  static dirname(path) {\n    const pathString = uriObjectToString(path);\n    const pathURL = asUrl(pathString);\n    if (pathURL) {\n      pathURL.pathname = encodeURLChars(dirnamePath(decodeURIComponent(pathURL.pathname)));\n      return pathURL.toString();\n    }\n    return dirnamePath(pathString);\n  }\n  static basename(path, ext) {\n    const pathString = uriObjectToString(path);\n    const pathURL = asUrl(pathString);\n    if (pathURL) return basenamePath(decodeURIComponent(pathURL.pathname));\n    return basenamePath(pathString, ext);\n  }\n  static extname(path) {\n    const pathString = uriObjectToString(path);\n    const pathURL = asUrl(pathString);\n    if (pathURL) return extnamePath(decodeURIComponent(pathURL.pathname));\n    return extnamePath(pathString);\n  }\n  static parse(path) {\n    const pathString = uriObjectToString(path);\n    const pathURL = asUrl(pathString);\n    if (pathURL) return parsePath(decodeURIComponent(pathURL.pathname));\n    return parsePath(pathString);\n  }\n}\nexport {\n  PathUtilities\n};\n//# sourceMappingURL=paths.js.map\n"],"mappings":"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"}