UNPKG

1.9 kBJavaScriptView Raw
1var fs = require('fs');
2var through = require('through');
3var browserify = require('browserify');
4var exorcist = require('exorcist');
5
6function fixGherkinLexers(file) {
7 var data = '';
8
9 function write (buf) { data += buf; }
10
11 function end () {
12 var path = __dirname + '/node_modules/gherkin/lib';
13 var lexersPath = path + '/gherkin/lexer';
14 if (file === path + '/gherkin.js') {
15 // Patch gherkin so that all lexers are available statically:
16 var bufferPrefix = '';
17 var dirFiles = fs.readdirSync(lexersPath);
18 dirFiles.forEach(function (dirFile) {
19 var matches = dirFile.match(/^(.*)\.js$/);
20 if (matches && !dirFile.match(/\.min\.js$/)) {
21 bufferPrefix += 'require("./gherkin/lexer/' + matches[1] + '");\n';
22 }
23 });
24 data = bufferPrefix + data;
25 }
26 var ignoredFiles = [
27 __dirname + '/lib/cucumber/cli.js'
28 ];
29 if (ignoredFiles.indexOf(file) > -1) {
30 data = '';
31 }
32 this.queue(data);
33 this.queue(null);
34 }
35
36 return through(write, end);
37}
38
39function Bundler(bundlePath) {
40 var mapPath = bundlePath + '.map';
41
42 var self = {
43 bundle: function (callback) {
44 var _callback = callback;
45 callback = function (err) {
46 if (_callback) _callback(err);
47 _callback = null;
48 };
49
50 browserify({debug: true, standalone: 'Cucumber'})
51 .transform({global: true}, fixGherkinLexers)
52 // Disabled for now due to https://github.com/AndreasMadsen/stack-chain/issues/5
53 //.transform({global:true}, 'uglifyify')
54 .require('./bundle-main', { expose: 'cucumber' })
55 .bundle()
56 .on('error', callback)
57 .pipe(exorcist(mapPath))
58 .on('error', callback)
59 .pipe(fs.createWriteStream(bundlePath, 'utf8'))
60 .on('error', callback)
61 .on('finish', callback);
62 }
63 };
64
65 return self;
66}
67
68module.exports = Bundler;