From: eric Date: Sat, 17 Jan 2015 21:31:01 +0000 (-0500) Subject: Merge pull request #6 from ethul/topic/bower-components X-Git-Tag: 0.0.3~1 X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=84bdfea8eab66d3f797d1616db0e4fd63138fb6f;hp=ebf06d39692b92058df757b2ec0009f0935d4563;p=github%2Ffretlink%2Fpurs-loader.git Merge pull request #6 from ethul/topic/bower-components Topic/bower components --- diff --git a/.gitignore b/.gitignore index 63d8f4c..8cde684 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ +npm-debug.log node_modules/ example/node_modules/ +example/bower_components/ example/dist/ example/output/ diff --git a/README.md b/README.md index 630f82e..dcbedf2 100644 --- a/README.md +++ b/README.md @@ -27,27 +27,4 @@ npm install purs-loader --save-dev ## Example -```js -var path = require('path'); - -module.exports = { - entry: './src/test', - output: { - path: path.join(__dirname, 'dist'), - filename: 'app.js' - }, - module: { - loaders: [{ - test: /\.purs$/, - loader: 'purs-loader?no-prelude&output=output' - }] - }, - resolve: { - modulesDirectories: [ - 'node_modules', - 'web_modules', - 'output' - ] - } -}; -``` +See the [example](https://github.com/ethul/purs-loader/tree/topic/bower-components/example) directory for a complete example. diff --git a/example/README.md b/example/README.md index ae798e7..87b9bc7 100644 --- a/example/README.md +++ b/example/README.md @@ -1,4 +1,5 @@ ```bash +bower install npm install npm run-script webpack npm run-script run diff --git a/example/bower.json b/example/bower.json new file mode 100644 index 0000000..8d71688 --- /dev/null +++ b/example/bower.json @@ -0,0 +1,15 @@ +{ + "name": "example", + "license": "MIT", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "devDependencies": { + "purescript-maybe": "~0.2.1" + } +} diff --git a/example/index.html b/example/index.html deleted file mode 100644 index 8db646e..0000000 --- a/example/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - -

Hello world! This is HTML5 Boilerplate.

- - - diff --git a/example/package.json b/example/package.json index b2d0d86..6b0c04c 100644 --- a/example/package.json +++ b/example/package.json @@ -4,11 +4,12 @@ "private": true, "scripts": { "webpack": "./node_modules/.bin/webpack", - "run": "node dist/app.js" + "run": "node dist/app.js", + "clean": "rm -rf bower_components && rm -rf dist && rm -rf node_modules && rm -rf output" }, "license": "MIT", "devDependencies": { - "purs-loader": "0.0.2", + "purs-loader": "file:../", "webpack": "^1.4.15" } } diff --git a/example/src/Foo.purs b/example/src/Foo.purs new file mode 100644 index 0000000..3e3a04c --- /dev/null +++ b/example/src/Foo.purs @@ -0,0 +1,6 @@ +module Foo (foo) where + +import Data.Maybe +import qualified Foo.Bar as B + +foo = "b" diff --git a/example/src/Foo/Bar.purs b/example/src/Foo/Bar.purs new file mode 100644 index 0000000..4ae100d --- /dev/null +++ b/example/src/Foo/Bar.purs @@ -0,0 +1,3 @@ +module Foo.Bar (bar) where + +bar = "c" diff --git a/example/src/Foo/Baz.purs b/example/src/Foo/Baz.purs new file mode 100644 index 0000000..7b0451e --- /dev/null +++ b/example/src/Foo/Baz.purs @@ -0,0 +1,3 @@ +module Foo.Baz (baz) where + +baz = "d" diff --git a/example/src/Test.purs b/example/src/Test.purs index 7409c6e..8a5cb88 100644 --- a/example/src/Test.purs +++ b/example/src/Test.purs @@ -1,3 +1,5 @@ module Test (test) where +import Data.Maybe + test = "a" diff --git a/example/src/entry.js b/example/src/entry.js index 65119f6..160bee4 100644 --- a/example/src/entry.js +++ b/example/src/entry.js @@ -1,3 +1,7 @@ -var test = require('purs?no-prelude&output=output!./Test.purs'); +var test = require('purs?output=output!./Test.purs'); -console.log(test); +var foo = require('purs?output=output!./Foo.purs'); + +var baz = require('purs?output=output!./Foo/Baz.purs'); + +console.log(test, foo, baz); diff --git a/index.js b/index.js index 07988a2..4a74d15 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,8 @@ var cp = require('child_process') , chalk = require('chalk') , lu = require('loader-utils') , cwd = process.cwd() + , MODULE_RE = /^module\s+([\w\.]+)\s+/i + , BOWER_PATTERN = path.join('bower_components', 'purescript-*', 'src') , PSC_MAKE = 'psc-make' , OUTPUT = 'output' , OPTIONS = { @@ -18,6 +20,11 @@ var cp = require('child_process') } ; +function pattern(root) { + var as = [ BOWER_PATTERN, root ]; + return path.join('{' + as.join(',') + '}', '**', '*.purs'); +} + module.exports = function(source){ var callback = this.async() , request = lu.getRemainingRequest(this) @@ -29,14 +36,15 @@ module.exports = function(source){ else return h(OPTIONS[k]); }, []) ; - glob(path.join(root, '**', '*.purs'), function(e, files){ + glob(pattern(root), function(e, files){ if (e !== null) callback(e); else { var cmd = cp.spawn(PSC_MAKE, opts.concat(files)); cmd.on('close', function(e){ if (e) callback(e); else { - var module = path.basename(request, '.purs'); + var result = MODULE_RE.exec(source); + var module = result.length > 1 ? result[1] : ''; fs.readFile(path.join(query[OUTPUT] || OUTPUT, module, 'index.js'), 'utf-8', function(e, output){ if (e) callback(e); else callback(e, output);