]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Handle optional bundling by the compiler
authoreric thul <thul.eric@gmail.com>
Wed, 9 Mar 2016 02:58:55 +0000 (21:58 -0500)
committereric thul <thul.eric@gmail.com>
Wed, 9 Mar 2016 03:01:40 +0000 (22:01 -0500)
Resolves ethul/purescript-webpack-plugin#9

README.md
docs/PursLoader/Plugin.md
package.json
src/PursLoader/Loader.purs
src/PursLoader/LoaderRef.js
src/PursLoader/LoaderRef.purs
src/PursLoader/LoaderUtil.js [deleted file]
src/PursLoader/LoaderUtil.purs [deleted file]
src/PursLoader/Options.purs [deleted file]
src/PursLoader/Plugin.purs

index 0e1ce2fc1b1b5529409ca588a80d73b9da890cc8..e93e96987d0a6334ac83c388168003ca28455647 100644 (file)
--- a/README.md
+++ b/README.md
@@ -12,12 +12,6 @@ This loader works in conjunction with the [PureScript webpack plugin](https://np
 npm install purs-loader --save-dev
 ```
 
-## Options
-
-###### `bundleOutput` (String)
-
-Relative path to the bundled JavaScript file generated by the `PurescriptWebpackPlugin`. The default value is `output/bundle.js`.
-
 ## Example
 
 ```js
index 9abec4df29eee5739123baf406c0ff36cd9215c8..26e3f26f26ad5cd5bfcc8cb2321e4bd5b495aa9d 100644 (file)
@@ -15,7 +15,13 @@ type Compile eff = Nullable Error -> Result -> Eff eff Unit
 #### `Context`
 
 ``` purescript
-type Context eff = { compile :: Compile eff -> Eff eff Unit }
+type Context eff = { compile :: Compile eff -> Eff eff Unit, options :: Options }
+```
+
+#### `Options`
+
+``` purescript
+type Options = { bundle :: Boolean, output :: String, bundleOutput :: String }
 ```
 
 #### `get`
index 1491de6941e6a64f16929dc814449f5cfe69b160..b0c119dd46c6ca698f9e7d2f4181b07a1f093734 100644 (file)
@@ -26,7 +26,6 @@
   "dependencies": {
     "async": "^1.3.0",
     "chalk": "^1.1.0",
-    "debug": "^2.2.0",
-    "loader-utils": "^0.2.6"
+    "debug": "^2.2.0"
   }
 }
index d1068b6b91b896939b9cf491cfd694ab168fe91e..0dfa20ebe7fd8bbbd3d3c91d1cd7e9d78ead0fd2 100644 (file)
@@ -4,7 +4,7 @@ module PursLoader.Loader
   , loaderFn
   ) where
 
-import Prelude (Unit(), ($), (>>=), (<$>), (<*>), (++), bind, const, id, pure, unit)
+import Prelude (Unit(), ($), (>>=), (<$>), (<*>), (++), (<<<), bind, const, id, pure, unit)
 
 import Control.Apply ((*>))
 import Control.Alt ((<|>))
@@ -13,9 +13,7 @@ import Control.Monad.Eff (Eff(), foreachE)
 import Control.Monad.Eff.Exception (Error(), error)
 
 import Data.Array ((!!))
-import Data.Bifunctor (lmap)
 import Data.Either (Either(..), either)
-import Data.Foreign.Class (read)
 import Data.Function (Fn2(), mkFn2)
 import Data.Maybe (Maybe(..), maybe)
 import Data.Nullable (toMaybe)
@@ -29,16 +27,13 @@ import PursLoader.LoaderRef
   , Loader()
   , async
   , cacheable
-  , query
   , clearDependencies
   , addDependency
   , resourcePath
   )
 
 import PursLoader.Debug (debug)
-import PursLoader.LoaderUtil (parseQuery)
-import PursLoader.Options (Options(..))
-import PursLoader.Path (dirname, relative)
+import PursLoader.Path (dirname, joinPath, relative)
 import PursLoader.Plugin as Plugin
 
 type Effects eff = (loader :: Loader | eff)
@@ -77,10 +72,31 @@ loader ref source = do
       callback (toMaybe error') res
 
     exports :: Either Error String
-    exports = (\a b -> "module.exports = require('" ++ a ++ "')['" ++ b ++ "'];") <$> path <*> name
+    exports =
+      if pluginContext.options.bundle
+         then bundleExport <$> name
+         else moduleExport <<< modulePath <$> name
+      where
+      bundleExport :: String -> String
+      bundleExport name' = "module.exports = require('" ++ path ++ "')['" ++ name' ++ "'];"
+        where
+        path :: String
+        path = relative resourceDir pluginContext.options.bundleOutput
+
+      moduleExport :: String -> String
+      moduleExport path = "module.exports = require('" ++ path ++ "');"
+
+      modulePath :: String -> String
+      modulePath = relative resourceDir <<< joinPath pluginContext.options.output
+
+      resourceDir :: String
+      resourceDir = dirname (resourcePath ref)
 
     dependencies :: Either Error (Array String)
-    dependencies = name >>= Plugin.dependenciesOf graph
+    dependencies =
+      if pluginContext.options.bundle
+         then name >>= Plugin.dependenciesOf graph
+         else pure []
 
     addTransitive :: String -> Eff (Effects eff) Unit
     addTransitive dep = addDep (Plugin.get srcMap dep) *> addDep (Plugin.get ffiMap dep)
@@ -96,16 +112,5 @@ loader ref source = do
       re :: Regex
       re = regex "(?:^|\\n)module\\s+([\\w\\.]+)" noFlags { ignoreCase = true }
 
-    path :: Either Error String
-    path = (\(Options opts) -> relative resourceDir opts.bundleOutput) <$> options
-      where
-      options :: Either Error Options
-      options =
-        lmap (const $ error "Failed to parse loader query")
-             (read $ parseQuery (query ref))
-
-      resourceDir :: String
-      resourceDir = dirname (resourcePath ref)
-
 loaderFn :: forall eff. Fn2 LoaderRef String (Eff (Effects eff) Unit)
 loaderFn = mkFn2 loader
index 3ce0970d0bd729a9319da392c7af36789553d183..e92c72c1289ad0f150bede2ecb7f74240968b764 100644 (file)
@@ -21,10 +21,6 @@ function cacheable(ref){
   };
 }
 
-function query(ref){
-  return ref.query;
-}
-
 function clearDependencies(ref){
   return function(){
     return ref.clearDependencies();
index 87d60065007b3f7631c85c727a4bba7b9d472c03..140d94ab9f94d106f438b820d36e755a1f9f2aa5 100644 (file)
@@ -4,7 +4,6 @@ module PursLoader.LoaderRef
   , AsyncCallback()
   , async
   , cacheable
-  , query
   , clearDependencies
   , addDependency
   , resourcePath
@@ -34,8 +33,6 @@ async ref = runFn3 asyncFn isJust fromMaybe ref
 
 foreign import cacheable :: forall eff. LoaderRef -> Eff (loader :: Loader | eff) Unit
 
-foreign import query :: LoaderRef -> String
-
 foreign import clearDependencies :: forall eff. LoaderRef -> Eff (loader :: Loader | eff) Unit
 
 foreign import resourcePath :: LoaderRef -> String
diff --git a/src/PursLoader/LoaderUtil.js b/src/PursLoader/LoaderUtil.js
deleted file mode 100644 (file)
index 45f2703..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict';
-
-// module PursLoader.LoaderUtil
-
-var loaderUtils = require('loader-utils');
-
-exports.parseQuery = loaderUtils.parseQuery;
diff --git a/src/PursLoader/LoaderUtil.purs b/src/PursLoader/LoaderUtil.purs
deleted file mode 100644 (file)
index 45495c8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-module PursLoader.LoaderUtil
-  ( parseQuery
-  ) where
-
-import Data.Foreign (Foreign())
-
-foreign import parseQuery :: String -> Foreign
diff --git a/src/PursLoader/Options.purs b/src/PursLoader/Options.purs
deleted file mode 100644 (file)
index 0c1453e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-module PursLoader.Options
-  ( Options(..)
-  , runOptions
-  ) where
-
-import Prelude ((<$>), (<<<), id)
-
-import Data.Foreign.Class (IsForeign, readProp)
-import Data.Foreign.NullOrUndefined (runNullOrUndefined)
-import Data.Maybe (maybe)
-
-import PursLoader.Path (joinPath)
-
-newtype Options = Options { bundleOutput :: String }
-
-type Options_ = { bundleOutput :: String }
-
-runOptions :: Options -> Options_
-runOptions (Options options) = options
-
-instance isForeignOptions :: IsForeign Options where
-  read obj =
-    Options <$> ({ bundleOutput: _ }
-            <$> (maybe bundleOutputDefault id <<< runNullOrUndefined <$> readProp bundleOutput obj))
-    where
-    bundleOutput :: String
-    bundleOutput = "bundleOutput"
-
-    bundleOutputDefault :: String
-    bundleOutputDefault = joinPath "output" "bundle.js"
index 23f8600436478fdd0ed1c585d59f2b3718149046..520c78682293e643b1c83abaf83ce6444bc54a77 100644 (file)
@@ -2,6 +2,7 @@ module PursLoader.Plugin
   ( Result()
   , Compile()
   , Context()
+  , Options()
   , ImmutableMap()
   , DependencyGraph()
   , get
@@ -22,7 +23,9 @@ type Result = { srcMap :: ImmutableMap String String, ffiMap :: ImmutableMap Str
 
 type Compile eff = Nullable Error -> Result -> Eff eff Unit
 
-type Context eff = { compile :: Compile eff -> Eff eff Unit }
+type Context eff = { compile :: Compile eff -> Eff eff Unit, options :: Options }
+
+type Options = { bundle :: Boolean, output :: String, bundleOutput :: String }
 
 get :: forall key value. ImmutableMap key value -> key -> Maybe value
 get = runFn4 getFn Nothing Just