@@ -19,12 +19,14 @@ module Main (main) where
1919import qualified Language.PureScript as P
2020
2121import Data.List (isSuffixOf)
22+import Data.Traversable (traverse)
2223import Control.Applicative
2324import Control.Monad
25+import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
2426import System.Exit
2527import System.Process
2628import System.FilePath (pathSeparator)
27−import System.Directory (getCurrentDirectory, getDirectoryContents)
29+import System.Directory (getCurrentDirectory, getDirectoryContents, findExecutable)
2830import System.Environment (getArgs)
2931import Text.Parsec (ParseError)
3032import qualified Paths_purescript as Paths
@@ -68,12 +70,18 @@ assertCompiles inputFile = do
6870 args <- getArgs
6971 if "--run-js" `elem` args
7072 then do
71− (exitCode, out, err) <- readProcessWithExitCode "nodejs" [] js
72− case exitCode of
73− ExitSuccess -> putStrLn out >> return Nothing
74− ExitFailure code -> return $ Just err
73+ process <- findNodeProcess
74+ result <- traverse (\node -> readProcessWithExitCode node [] js) process
75+ case result of
76+ Just (ExitSuccess, out, _) -> putStrLn out >> return Nothing
77+ Just (ExitFailure _, _, err) -> return $ Just err
78+ Nothing -> return $ Just "Couldn't find node.js executable"
7579 else return Nothing
7680
81+findNodeProcess :: IO (Maybe String)
82+findNodeProcess = runMaybeT . msum $ map (MaybeT . findExecutable) names
83+ where names = ["nodejs", "node"]
84+
7785assertDoesNotCompile :: FilePath -> IO ()
7886assertDoesNotCompile inputFile = do
7987 putStrLn $ "assert " ++ inputFile ++ " does not compile"