]>
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 , BOWER_PATTERN
= path
.join('bower_components', 'purescript-*', 'src')
10 , PSC_MAKE
= 'psc-make'
13 'no-prelude': '--no-prelude',
14 'no-opts': '--no-opts',
15 'no-magic-do': '--no-magic-do',
17 'verbose-errors': '--verbose-errors',
22 function pattern(root
) {
23 var as
= [ BOWER_PATTERN
, root
];
24 return path
.join('{' + as
.join(',') + '}', '**', '*.purs');
27 module
.exports = function(source
){
28 var callback
= this.async()
29 , request
= lu
.getRemainingRequest(this)
30 , root
= path
.dirname(path
.relative(cwd
, request
))
31 , query
= lu
.parseQuery(this.query
)
32 , opts
= lodash
.foldl(lodash
.keys(query
), function(acc
, k
){
33 var h = function(v
){return acc
.concat(query
[k
] && OPTIONS
[k
] ? [v
] : []);}
34 if (k
=== OUTPUT
) return h(OPTIONS
[k
] + '=' + query
[k
]);
35 else return h(OPTIONS
[k
]);
38 glob(pattern(root
), function(e
, files
){
39 if (e
!== null) callback(e
);
41 var cmd
= cp
.spawn(PSC_MAKE
, opts
.concat(files
));
42 cmd
.on('close', function(e
){
45 var module
= path
.basename(request
, '.purs');
46 fs
.readFile(path
.join(query
[OUTPUT
] || OUTPUT
, module
, 'index.js'), 'utf-8', function(e
, output
){
48 else callback(e
, output
);
52 cmd
.stdout
.on('data', function(stdout
){
53 console
.log('Stdout from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stdout
));
55 cmd
.stderr
.on('data', function(stderr
){
56 console
.log('Stderr from \'' + chalk
.cyan(PSC_MAKE
) + '\'\n' + chalk
.magenta(stderr
));