aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js31
1 files changed, 27 insertions, 4 deletions
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