module Web.Herringbone.Internal.Precompile where
import Control.Monad (forM)
import qualified Filesystem.Path.CurrentOS as F
import qualified Data.Text as T
import Web.Herringbone.Internal.Types
import Web.Herringbone.Internal.FindAsset
import Web.Herringbone.Internal.GetBuildMapping (getBuildMapping)
precompile :: Herringbone -> IO [(LogicalPath, AssetError)]
precompile hb = do
mapping <- getBuildMapping hb
results <- forM mapping $ \(BuildSpec _ destPath _) -> do
let path = toLogicalPath destPath
either invalidPath compile path
return $ concat results
where
toLogicalPath filePath =
case F.toText filePath of
Left approximation ->
Left (unsafeMakeLogicalPath [approximation])
Right (T.splitOn "/" -> pieces) ->
Right (unsafeMakeLogicalPath pieces)
invalidPath path = return [(path, AssetNotFound)]
compile path = do
asset <- findAsset hb path
return $ case asset of
Right _ -> []
Left err -> [(path, err)]