]>
git.immae.eu Git - github/fretlink/purs-loader.git/blob - index.js
1 var cp
= require('child_process')
2 , path
= require('path')
4 , glob
= require('glob')
5 , lodash
= require('lodash')
6 , chalk
= require('chalk')
7 , lu
= require('loader-utils')
9 , PSC_MAKE
= 'psc-make'
12 'no-prelude': '--no-prelude',
13 'no-opts': '--no-opts',
14 'no-magic-do': '--no-magic-do',
16 'runtime-type-checks': '--runtime-type-checks',
17 'verbose-errors': '--verbose-errors',
22 module
.exports = function(source
){
23 var callback
= this.async()
24 , request
= lu
.getRemainingRequest(this)
25 , root
= path
.dirname(path
.relative(cwd
, request
))
26 , query
= lu
.parseQuery(this.query
)
27 , opts
= lodash
.foldl(lodash
.keys(query
), function(acc
, k
){
28 var h = function(v
){return acc
.concat(query
[k
] && OPTIONS
[k
] ? [v
] : []);}
29 if (k
=== OUTPUT
) return h(OPTIONS
[k
] + '=' + query
[k
]);
30 else return h(OPTIONS
[k
]);
33 glob(path
.join(root
, '**', '*.purs'), function(e
, files
){
34 if (e
!== null) callback(e
);
36 var cmd
= cp
.spawn(PSC_MAKE
, opts
.concat(files
));
37 cmd
.on('close', function(e
){
40 var module
= path
.basename(request
, '.purs');
41 fs
.readFile(path
.join(opts
[OPTIONS
[OUTPUT
]] || OUTPUT
, module
, 'index.js'), 'utf-8', function(e
, output
){
43 else callback(e
, output
);
47 cmd
.stdout
.on('data', function(stdout
){
48 console
.log('Stdout from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stdout
));
50 cmd
.stderr
.on('data', function(stderr
){
51 console
.log('Stderr from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stderr
));