-- | A simple TypeScript library. module TypeScript.Bindings ( TypeScript(..) , typeScriptCompile , typeScriptVersion , typeScriptPrint ) where import Control.Applicative ((<$>)) import Data.Maybe (fromMaybe) import System.Exit (ExitCode (..)) import System.Process (rawSystem, readProcess) -- | The TypeScript data structure data TypeScript = TypeScript { customCompiler :: Maybe FilePath -- ^ Custom compiler path, set to Nothing for default } deriving (Show) -- | Compile .ts file(s) typeScriptCompile :: [FilePath] -- ^ List of .ts files to compile -> Maybe FilePath -- ^ Output directory, Nothing for default -> TypeScript -- ^ TypeScript structure for more options -> IO ExitCode -- ^ Exit code typeScriptCompile [] _ _ = return $ ExitFailure 1 typeScriptCompile files output typeScript = rawSystem (getCompiler typeScript) args where args = outputPath output ++ files -- | Get the version of the typescript binary typeScriptVersion :: TypeScript -> IO String typeScriptVersion t = head . lines <$> typeScriptRead t ["-v"] -- | Print the TypeScript output typeScriptPrint :: FilePath -> TypeScript -> IO String typeScriptPrint file t = typeScriptRead t ["-v", file] outputPath :: Maybe FilePath -> [FilePath] outputPath (Just path) = ["-outDir", path] outputPath Nothing = [] getCompiler :: TypeScript -> FilePath getCompiler = fromMaybe "tsc" . customCompiler typeScriptRead :: TypeScript -> [String] -> IO String typeScriptRead typeScript args = readProcess (getCompiler typeScript) args []