]>
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 'verbose-errors': '--verbose-errors',
21 module
.exports = function(source
){
22 var callback
= this.async()
23 , request
= lu
.getRemainingRequest(this)
24 , root
= path
.dirname(path
.relative(cwd
, request
))
25 , query
= lu
.parseQuery(this.query
)
26 , opts
= lodash
.foldl(lodash
.keys(query
), function(acc
, k
){
27 var h = function(v
){return acc
.concat(query
[k
] && OPTIONS
[k
] ? [v
] : []);}
28 if (k
=== OUTPUT
) return h(OPTIONS
[k
] + '=' + query
[k
]);
29 else return h(OPTIONS
[k
]);
32 glob(path
.join(root
, '**', '*.purs'), function(e
, files
){
33 if (e
!== null) callback(e
);
35 var cmd
= cp
.spawn(PSC_MAKE
, opts
.concat(files
));
36 cmd
.on('close', function(e
){
39 var module
= path
.basename(request
, '.purs');
40 fs
.readFile(path
.join(query
[OUTPUT
] || OUTPUT
, module
, 'index.js'), 'utf-8', function(e
, output
){
42 else callback(e
, output
);
46 cmd
.stdout
.on('data', function(stdout
){
47 console
.log('Stdout from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stdout
));
49 cmd
.stderr
.on('data', function(stderr
){
50 console
.log('Stderr from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stderr
));