Pathos offers cross-platform virtual file system APIs for Swift.
Pathos is implement from ground-up with on each OS's native API. It has zero dependencies.
Windows support is currently considered experimental.
Swift 5.3 & 5.4.2 |
---|
(Experimental) |
For a taste of Pathos, let's generate a static site from Markdown!
import Pathos
// Set the CWD and execute a closure
try Path("markdown-source-dir").asWorkingDirectory {
// Build the site in a unique, temporary directory
let temporaryRoot = try Path.makeTemporaryDirectory()
// Joining path components that works across OSes.
// E.g. `articles/**/*.md` on POSIX systems.
let pattern = Path("articles") + "**" + "*.md"
// Use glob to find files that matches the pattern
for markdown in try pattern.glob() {
// path/to/file.md => path/to/file
let url = markdown.base
// path that contains index.html
let htmlDirectory = temporaryRoot + url
// make a directory, including multiple levels
try htmlDirectory.makeDirectory(withParents: true)
// read content of a file
let source = try markdown.readUTF8String()
// write out the html, imagine `markdown2html` exists
try (htmlDirectory + "index.html").write(utf8: markdown2html(source))
}
// all done! move the built site to output directory
try temporaryRoot.move(to: "output")
}
// CWD is restored after the closure is done
As you can see, Pathos offers a whole suite of APIs for inspecting and manipulating the file system. Programs built with Pathos compile and work on all supported OS without the need to use #if OS()
in the source.
There are more Examples for the curious.
With SwiftPM
.package(url: "http://github.com/dduan/Pathos", from: "0.4.2")
- User Guide - A tour of Pathos for introduction purposes.
- API Refererence - Complete reference to Pathos public APIs.
- Design - Answers for why an API is designed as such.
- Change Log - Change logs for all Pathos versions.
You may also checkout the Example apps.
Pathos is released under the MIT license. See LICENSE.md