summaryrefslogtreecommitdiff
path: root/src/jsMain/kotlin/io/Path.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/jsMain/kotlin/io/Path.kt')
-rw-r--r--src/jsMain/kotlin/io/Path.kt78
1 files changed, 0 insertions, 78 deletions
diff --git a/src/jsMain/kotlin/io/Path.kt b/src/jsMain/kotlin/io/Path.kt
deleted file mode 100644
index 241c559..0000000
--- a/src/jsMain/kotlin/io/Path.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package io
-
-sealed class Path {
- abstract val parts: List<String>
- fun toAbsolutePath(relativeTo: Absolute): Absolute {
- return relativeTo.resolve(this)
- }
-
- abstract fun resolve(path: Path): Path
-
- abstract val stringPath: String
-
- companion object {
- val root = Absolute(listOf())
-
- fun ofShell(string: String, userHome: Absolute): Path =
- ofShell(string.split("/"), userHome)
-
- fun ofShell(vararg parts: String, userHome: Absolute): Path =
- ofShell(parts.toList(), userHome)
-
- fun of(vararg parts: String): Path =
- of(parts.toList())
-
- fun of(string: String): Path =
- of(string.split("/"))
-
- fun ofShell(parts: List<String>, userHome: Absolute): Path {
- if (parts.firstOrNull() == "~")
- return userHome.resolve(Relative(parts.subList(1, parts.size).filter { it.isNotEmpty() }))
- return of(parts)
- }
-
- fun of(parts: List<String>): Path {
- if (parts.isEmpty())
- return root
- if (parts[0] == "") // Starts with a /
- return Absolute(parts.subList(1, parts.size).filter { it.isNotEmpty() })
- return Relative(parts.filter { it.isNotEmpty() })
- }
- }
-
- data class Relative internal constructor(override val parts: List<String>) : Path() {
- override fun resolve(path: Path): Path {
- if (path is Absolute) return path
- return Relative(this.parts + path.parts)
- }
-
- override val stringPath: String get() = parts.joinToString("/")
- }
-
- data class Absolute internal constructor(override val parts: List<String>) : Path() {
- override fun resolve(path: Path): Absolute {
- if (path is Absolute) return path
- return Absolute(this.parts + path.parts)
- }
-
- override val stringPath: String get() = "/" + parts.joinToString("/")
-
- fun relativize(path: Path): Relative = when (path) {
- is Relative -> path
- is Absolute -> {
- var idx = 0
- while (idx < path.parts.size && idx < parts.size && path.parts[idx] == parts[idx]) {
- idx++
- }
- val returns = if (idx < parts.size) {
- parts.size - idx
- } else {
- 0
- }
- Relative(List(returns) { ".." } + path.parts.subList(idx, path.parts.size))
- }
- }
- }
-
- override fun toString(): String = "Path($stringPath)"
-}