]> git.immae.eu Git - github/fretlink/purs-loader.git/blobdiff - src/FS.purs
Add FFI JavaScript as a webpack dependency
[github/fretlink/purs-loader.git] / src / FS.purs
index 68fe2f9afe5913c3d26691d7437c351ef5e89a9a..6955a632abbbd5beb79680b42bd5eb159917b10c 100644 (file)
@@ -1,45 +1,67 @@
 module PursLoader.FS
   ( FS()
-  , readFileUtf8
-  , readFileUtf8Sync
+  , writeFileUtf8
+  , findFileUtf8
   ) where
 
 import Control.Monad.Aff (Aff(), makeAff)
 import Control.Monad.Eff (Eff())
 import Control.Monad.Eff.Exception (Error())
 
+import Data.Maybe (Maybe(..))
+import Data.String.Regex (Regex())
+
 import Data.Function
 
 foreign import data FS :: !
 
-readFileUtf8 :: forall eff. String -> Aff (fs :: FS | eff) String
-readFileUtf8 filepath = makeAff $ runFn3 readFileUtf8Fn filepath
-
-readFileUtf8Sync :: forall eff. String -> Eff (fs :: FS | eff) String
-readFileUtf8Sync filepath = readFileUtf8SyncFn filepath
+writeFileUtf8 :: forall eff. String -> String -> Aff (fs :: FS | eff) Unit
+writeFileUtf8 filepath contents = makeAff $ runFn4 writeFileUtf8Fn filepath contents
 
-foreign import readFileUtf8Fn """
-function readFileUtf8Fn(filepath, errback, callback) {
+foreign import writeFileUtf8Fn """
+function writeFileUtf8Fn(filepath, contents, errback, callback) {
   return function(){
     var fs = require('fs');
 
-    fs.readFile(filepath, 'utf-8', function(e, data){
-      if (e) errback(e)();
-      else callback(data)();
+    fs.writeFile(filepath, contents, function(error){
+      if (error) errback(error)();
+      else callback()();
     });
   };
 }
-""" :: forall eff. Fn3 String
+""" :: forall eff. Fn4 String
+                       String
                        (Error -> Eff (fs :: FS | eff) Unit)
-                       (String -> Eff (fs :: FS | eff) Unit)
+                       (Unit -> Eff (fs :: FS | eff) Unit)
                        (Eff (fs :: FS | eff) Unit)
 
-foreign import readFileUtf8SyncFn """
-function readFileUtf8SyncFn(filepath) {
+findFileUtf8 :: forall eff. Regex -> [String] -> Aff (fs :: FS | eff) (Maybe String)
+findFileUtf8 regexp filepaths = makeAff $ runFn6 findFileUtf8Fn Nothing Just regexp filepaths
+
+foreign import findFileUtf8Fn """
+function findFileUtf8Fn(nothing, just, regex, filepaths, errback, callback) {
   return function(){
     var fs = require('fs');
 
-    return fs.readFileSync(filepath, {encoding: 'utf-8'});
+    var async = require('async');
+
+    function findFile(filepath, callback) {
+      fs.readFile(filepath, {encoding: 'utf-8'}, function(error, result){
+        if (error) callback(false);
+        else callback(regex.test(result));
+      });
+    }
+
+    async.detect(filepaths, findFile, function(result){
+      if (!result) callback(nothing)();
+      else callback(just(result))();
+    });
   };
 }
-""" :: forall eff. String -> (Eff (fs :: FS | eff) String)
+""" :: forall eff. Fn6 (Maybe String)
+                       (String -> Maybe String)
+                       Regex
+                       [String]
+                       (Error -> Eff (fs :: FS | eff) Unit)
+                       (Maybe String -> Eff (fs :: FS | eff) Unit)
+                       (Eff (fs :: FS | eff) Unit)