aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/FS.purs
diff options
context:
space:
mode:
Diffstat (limited to 'src/FS.purs')
-rw-r--r--src/FS.purs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/FS.purs b/src/FS.purs
index a56fe26..6955a63 100644
--- a/src/FS.purs
+++ b/src/FS.purs
@@ -1,12 +1,16 @@
1module PursLoader.FS 1module PursLoader.FS
2 ( FS() 2 ( FS()
3 , writeFileUtf8 3 , writeFileUtf8
4 , findFileUtf8
4 ) where 5 ) where
5 6
6import Control.Monad.Aff (Aff(), makeAff) 7import Control.Monad.Aff (Aff(), makeAff)
7import Control.Monad.Eff (Eff()) 8import Control.Monad.Eff (Eff())
8import Control.Monad.Eff.Exception (Error()) 9import Control.Monad.Eff.Exception (Error())
9 10
11import Data.Maybe (Maybe(..))
12import Data.String.Regex (Regex())
13
10import Data.Function 14import Data.Function
11 15
12foreign import data FS :: ! 16foreign import data FS :: !
@@ -30,3 +34,34 @@ function writeFileUtf8Fn(filepath, contents, errback, callback) {
30 (Error -> Eff (fs :: FS | eff) Unit) 34 (Error -> Eff (fs :: FS | eff) Unit)
31 (Unit -> Eff (fs :: FS | eff) Unit) 35 (Unit -> Eff (fs :: FS | eff) Unit)
32 (Eff (fs :: FS | eff) Unit) 36 (Eff (fs :: FS | eff) Unit)
37
38findFileUtf8 :: forall eff. Regex -> [String] -> Aff (fs :: FS | eff) (Maybe String)
39findFileUtf8 regexp filepaths = makeAff $ runFn6 findFileUtf8Fn Nothing Just regexp filepaths
40
41foreign import findFileUtf8Fn """
42function findFileUtf8Fn(nothing, just, regex, filepaths, errback, callback) {
43 return function(){
44 var fs = require('fs');
45
46 var async = require('async');
47
48 function findFile(filepath, callback) {
49 fs.readFile(filepath, {encoding: 'utf-8'}, function(error, result){
50 if (error) callback(false);
51 else callback(regex.test(result));
52 });
53 }
54
55 async.detect(filepaths, findFile, function(result){
56 if (!result) callback(nothing)();
57 else callback(just(result))();
58 });
59 };
60}
61""" :: forall eff. Fn6 (Maybe String)
62 (String -> Maybe String)
63 Regex
64 [String]
65 (Error -> Eff (fs :: FS | eff) Unit)
66 (Maybe String -> Eff (fs :: FS | eff) Unit)
67 (Eff (fs :: FS | eff) Unit)