Path Module
Import using: use path. Provides pure string manipulation of file paths (cross-platform).
Constants
path.sep- Platform path separator (/on POSIX,\on Windows).path.delimiter- Path list delimiter (:on POSIX,;on Windows).
use path
print(path.sep) # / or \
print(path.delimiter) # : or ;
Join & Resolve
path.join(...parts)- Join multiple path segments using platform separator.path.resolve(p)- Resolve relative path to absolute.path.normalize(p)- Normalize path (resolve ., .., duplicate separators).path.relative(from, to)- Compute relative path from from to to.
use path
print(path.join("folder", "file.txt"))
# On Windows: folder\file.txt
# On POSIX: folder/file.txt
let messy = "folder1/../folder2/./file.txt"
print(path.normalize(messy)) # folder2/file.txt
Decomposition
path.dirname(p)- Parent directory portion.path.basename(p, suffix?)- Last component (file/directory name), optionally strip suffix.path.extname(p)- File extension (including leading dot).path.parse(p)- Parse into Map with keys: root, dir, base, name, ext.path.format(obj)- Format path from Map with keys: root, dir, base, name, ext.path.split(p)- Split into [dirname, basename].path.splitext(p)- Split into [root_path, extension].path.parts(p)- Decompose into array of component names.
use path
let p = "folder1/folder2/file.txt"
print(path.dirname(p)) # folder1/folder2
print(path.basename(p)) # file.txt
print(path.extname(p)) # .txt
let parsed = path.parse(p)
print(parsed["name"]) # file
print(parsed["ext"]) # .txt
let parts = path.parts(p)
print(str(parts)) # ["folder1", "folder2", "file.txt"]
Query & Security
path.isAbsolute(p)- Check if path is absolute.path.isSafe(base, target)- Check target does not escape outside base.
use path
print(str(path.isAbsolute("/abs/path"))) # True on POSIX
print(str(path.isAbsolute("relative"))) # False
print(str(path.isSafe("/base", "/base/file"))) # True
print(str(path.isSafe("/base", "/other"))) # False