1 | var fs = require('fs');
|
2 | var through = require('through');
|
3 | var browserify = require('browserify');
|
4 | var exorcist = require('exorcist');
|
5 |
|
6 | function 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 |
|
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 |
|
39 | function 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 | var operation = browserify({debug: true, standalone: 'Cucumber'})
|
51 | .transform({global: true}, fixGherkinLexers)
|
52 | .transform({global:true}, 'uglifyify')
|
53 | .exclude('./lib/cucumber/cli')
|
54 | .require('./bundle-main', { expose: 'cucumber' })
|
55 | .bundle()
|
56 | .pipe(exorcist(mapPath))
|
57 | .pipe(fs.createWriteStream(bundlePath, 'utf8'));
|
58 |
|
59 | operation.on('error', function (err) {
|
60 | callback(err);
|
61 | });
|
62 |
|
63 | operation.on('finish', function () {
|
64 | callback();
|
65 | });
|
66 | }
|
67 | };
|
68 |
|
69 | return self;
|
70 | }
|
71 |
|
72 | module.exports = Bundler;
|