{-# LANGUAGE OverloadedStrings #-} module Snap.Snaplet.PureScript.Hooks ( getHooks , Hook , Hooks(..) ) where import Data.Configurator import Data.Configurator.Types (Config) import qualified Data.Text as T import Shelly -------------------------------------------------------------------------------- type Hook = Sh () -------------------------------------------------------------------------------- data Hooks = Hooks { preInitHook :: Hook , postInitHook :: Hook , preBuildHook :: Hook , postBuildHook :: Hook , preBundleHook :: Hook , postBundleHook :: Hook } instance Show Hooks where show _ = "<>" -------------------------------------------------------------------------------- noOpHook :: Hook noOpHook = return () -------------------------------------------------------------------------------- mkHook :: T.Text -> Hook mkHook "" = noOpHook mkHook t = case T.words t of [] -> noOpHook (x:args) -> run_ (fromText x) args -------------------------------------------------------------------------------- getHooks :: Config -> IO Hooks getHooks cfg = Hooks <$> (mkHook <$> lookupDefault "" cfg "hooks.preInit") <*> (mkHook <$> lookupDefault "" cfg "hooks.postInit") <*> (mkHook <$> lookupDefault "" cfg "hooks.preBuild") <*> (mkHook <$> lookupDefault "" cfg "hooks.postBuild") <*> (mkHook <$> lookupDefault "" cfg "hooks.preBundle") <*> (mkHook <$> lookupDefault "" cfg "hooks.postBundle")