diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/index.js | 31 |
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'); | |||
10 | const Psc = require('./Psc'); | 10 | const Psc = require('./Psc'); |
11 | const PscIde = require('./PscIde'); | 11 | const PscIde = require('./PscIde'); |
12 | const dargs = require('./dargs'); | 12 | const dargs = require('./dargs'); |
13 | const spawn = require('cross-spawn').sync | ||
14 | const eol = require('os').EOL | ||
13 | 15 | ||
14 | const requireRegex = /require\(['"]\.\.\/([\w\.]+)['"]\)/g | 16 | const 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 | ||