packages feed

tailwind-0.2.0.0: exe/Main.hs

{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}

module Main where

import qualified Control.Applicative.Combinators.NonEmpty as NE
import Control.Lens.Operators
import Control.Monad.Logger.CallStack (runStdoutLoggingT)
import Data.Default (Default (def))
import Main.Utf8 (withUtf8)
import Options.Applicative
import System.FilePattern (FilePattern)
import Web.Tailwind

data Cli = Cli
  { content :: NonEmpty FilePattern,
    output :: FilePath,
    mode :: Mode
  }
  deriving (Eq, Show)

cliParser :: Parser Cli
cliParser = do
  content <- NE.some (argument str (metavar "SOURCES..."))
  output <- strOption (long "output" <> short 'o' <> metavar "OUTPUT" <> value "tailwind.css")
  mode <- modeParser
  pure Cli {..}

modeParser :: Parser Mode
modeParser = do
  bool Production JIT <$> switch (long "watch" <> short 'w' <> help "Run JIT")

main :: IO ()
main = do
  withUtf8 $ do
    cli <- execParser opts
    print cli
    runStdoutLoggingT $
      runTailwind $
        def
          & tailwindConfig . tailwindConfigContent .~ toList (content cli)
          & tailwindOutput .~ output cli
          & tailwindMode .~ mode cli
  where
    opts =
      info
        (cliParser <**> helper)
        ( fullDesc
            <> progDesc "Run Tailwind"
        )