aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README.md12
-rw-r--r--src/index.js31
2 files changed, 36 insertions, 7 deletions
diff --git a/README.md b/README.md
index 292ab85..add7756 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ Refer to the [purescript-webpack-example](https://github.com/ethul/purescript-we
47Default options: 47Default options:
48 48
49```javascript 49```javascript
50{ 50const loaderConfig = {
51 psc: 'psc', 51 psc: 'psc',
52 pscArgs: {}, 52 pscArgs: {},
53 pscBundle: 'psc-bundle', 53 pscBundle: 'psc-bundle',
@@ -56,6 +56,7 @@ Default options:
56 pscIdeArgs: {}, // for example, to use different psc-ide-server port: {port: 4088} 56 pscIdeArgs: {}, // for example, to use different psc-ide-server port: {port: 4088}
57 pscIdeServerArgs: {}, // for example, to change the port { port: 4088 } 57 pscIdeServerArgs: {}, // for example, to change the port { port: 4088 }
58 pscIdeColors: false, // defaults to true if psc === 'psa' 58 pscIdeColors: false, // defaults to true if psc === 'psa'
59 pscPackage: false,
59 bundleOutput: 'output/bundle.js', 60 bundleOutput: 'output/bundle.js',
60 bundleNamespace: 'PS', 61 bundleNamespace: 'PS',
61 bundle: false, 62 bundle: false,
@@ -63,7 +64,11 @@ Default options:
63 output: 'output', 64 output: 'output',
64 src: [ 65 src: [
65 path.join('src', '**', '*.purs'), 66 path.join('src', '**', '*.purs'),
67 // if pscPackage = false
66 path.join('bower_components', 'purescript-*', 'src', '**', '*.purs') 68 path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
69 /*
70 * OR source paths reported by `psc-package sources`, if pscPackage = true
71 */
67 ] 72 ]
68} 73}
69``` 74```
@@ -84,6 +89,7 @@ it might result in a slower initial webpack startup time (rebuilds are not
84affected). To override the default behaviour, add: 89affected). To override the default behaviour, add:
85`pscIdeServerArgs: { "_": ['your/*globs/here'] }` to the loader config 90`pscIdeServerArgs: { "_": ['your/*globs/here'] }` to the loader config
86 91
92### `psc-package` support (experimental)
87 93
88 94Set `pscPackage` query parameter to `true` to enable `psc-package` support. The `psc-package`-supplied source paths
89 95will be appended to `src` parameter.
diff --git a/src/index.js b/src/index.js
index f3390dc..249f472 100644
--- a/src/index.js
+++ b/src/index.js
@@ -10,6 +10,8 @@ const PsModuleMap = require('./PsModuleMap');
10const Psc = require('./Psc'); 10const Psc = require('./Psc');
11const PscIde = require('./PscIde'); 11const PscIde = require('./PscIde');
12const dargs = require('./dargs'); 12const dargs = require('./dargs');
13const spawn = require('cross-spawn').sync
14const eol = require('os').EOL
13 15
14const requireRegex = /require\(['"]\.\.\/([\w\.]+)['"]\)/g 16const requireRegex = /require\(['"]\.\.\/([\w\.]+)['"]\)/g
15 17
@@ -19,15 +21,30 @@ module.exports = function purescriptLoader(source, map) {
19 const query = loaderUtils.parseQuery(this.query) 21 const query = loaderUtils.parseQuery(this.query)
20 const webpackOptions = this.options.purescriptLoader || {} 22 const webpackOptions = this.options.purescriptLoader || {}
21 23
22 const options = Object.assign({ 24 const depsPaths = (pscPackage => {
25 if (pscPackage) {
26 debug('calling psc-package...')
27
28 return spawn('psc-package', ['sources']).stdout.toString().split(eol).filter(v => v != '')
29 }
30 else {
31 return [ path.join('bower_components', 'purescript-*', 'src', '**', '*.purs') ]
32 }
33 })
34
35 let options = Object.assign(webpackOptions, query)
36
37 const defaultDeps = depsPaths(options.pscPackage)
38 const defaultOptions = {
23 context: config.context, 39 context: config.context,
24 psc: 'psc', 40 psc: 'psc',
25 pscArgs: {}, 41 pscArgs: {},
26 pscBundle: 'psc-bundle', 42 pscBundle: 'psc-bundle',
27 pscBundleArgs: {}, 43 pscBundleArgs: {},
28 pscIde: false, 44 pscIde: false,
29 pscIdeColors: webpackOptions.psc === 'psa' || query.psc === 'psa', 45 pscIdeColors: options.psc === 'psa',
30 pscIdeArgs: {}, 46 pscIdeArgs: {},
47 pscPackage: false,
31 bundleOutput: 'output/bundle.js', 48 bundleOutput: 'output/bundle.js',
32 bundleNamespace: 'PS', 49 bundleNamespace: 'PS',
33 bundle: false, 50 bundle: false,
@@ -35,9 +52,9 @@ module.exports = function purescriptLoader(source, map) {
35 output: 'output', 52 output: 'output',
36 src: [ 53 src: [
37 path.join('src', '**', '*.purs'), 54 path.join('src', '**', '*.purs'),
38 path.join('bower_components', 'purescript-*', 'src', '**', '*.purs') 55 ...defaultDeps
39 ] 56 ]
40 }, webpackOptions, query) 57 }
41 58
42 this.cacheable && this.cacheable() 59 this.cacheable && this.cacheable()
43 60
@@ -49,6 +66,12 @@ module.exports = function purescriptLoader(source, map) {
49 errors: [] 66 errors: []
50 } 67 }
51 68
69 if (options.pscPackage && options.src) {
70 options.src = options.src.concat(defaultDeps) // append psc-package-provided source paths with users'
71 }
72
73 options = Object.assign(defaultOptions, options)
74
52 if (!config.purescriptLoaderInstalled) { 75 if (!config.purescriptLoaderInstalled) {
53 config.purescriptLoaderInstalled = true 76 config.purescriptLoaderInstalled = true
54 77