module Shikensu.Internal.Utilities
( commonDirectory
, compileParentPath
, compilePathToRoot
, replaceSingleDot
, stripPrefix
, takeDirName
) where
import Data.Maybe (fromMaybe)
import Flow
import System.FilePath
import qualified Data.List as List (map, stripPrefix)
import qualified Data.Tuple as Tuple (fst)
import qualified System.FilePath.Glob as Glob
commonDirectory :: String -> FilePath
commonDirectory =
Glob.compile
.> Glob.commonDirectory
.> Tuple.fst
.> normalise
.> dropTrailingPathSeparator
.> replaceSingleDot
compileParentPath :: FilePath -> Maybe FilePath
compileParentPath dirname =
case dirname of
"" -> Nothing
_ -> Just $ addTrailingPathSeparator ".."
compilePathToRoot :: FilePath -> FilePath
compilePathToRoot dirname =
if dirname == "" then
""
else
dirname
|> splitDirectories
|> fmap (const "..")
|> joinPath
|> addTrailingPathSeparator
replaceSingleDot :: String -> String
replaceSingleDot path =
if path == "." then "" else path
stripPrefix :: String -> String -> String
stripPrefix prefix target =
fromMaybe target (List.stripPrefix prefix target)
takeDirName :: FilePath -> FilePath
takeDirName =
takeDirectory .> replaceSingleDot