one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 21.3 kB
Source Map (JSON)
{"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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"}