1 |
|
2 | 'use strict';
|
3 |
|
4 | const gulp = require('gulp');
|
5 | const babel = require('gulp-babel');
|
6 | const browserify = require('browserify');
|
7 | const concat = require('gulp-concat');
|
8 | const eslint = require('gulp-eslint');
|
9 | const karma = require('karma');
|
10 | const mocha = require('gulp-mocha');
|
11 | const path = require('path');
|
12 | const rename = require('gulp-rename');
|
13 | const source = require('vinyl-source-stream');
|
14 | const sourcemaps = require('gulp-sourcemaps');
|
15 | const through = require('through2');
|
16 | const uglify = require('gulp-uglify');
|
17 |
|
18 |
|
19 | function toStringModule() {
|
20 | return through.obj((file, enc, done) => {
|
21 | if (file.isBuffer()) {
|
22 | var newContents = 'module.exports = ' + JSON.stringify(file.contents.toString(enc)) + ';';
|
23 | file.contents = new Buffer(newContents, enc);
|
24 | } else if (file.isStream()) {
|
25 | throw new Error('Streams are not yet supported.');
|
26 | }
|
27 | done(null, file);
|
28 | });
|
29 | }
|
30 |
|
31 | function runKarma(options, done) {
|
32 | if (typeof options === 'function') {
|
33 | done = options;
|
34 | options = {};
|
35 | }
|
36 | options.configFile = path.join(__dirname, '/karma.conf.js');
|
37 |
|
38 | new karma.Server(options, exitCode => {
|
39 | if (exitCode === 0) {
|
40 | done();
|
41 | } else {
|
42 | done(new Error('Karma quit with exit code ' + exitCode));
|
43 | }
|
44 | }).start();
|
45 | }
|
46 |
|
47 |
|
48 |
|
49 | gulp.doneCallback = error => {
|
50 | process.exit(error ? 1 : 0);
|
51 | };
|
52 |
|
53 |
|
54 | gulp.task('lint', () => {
|
55 | return gulp.src(['src/**/*.js', 'src/**/*.js.txt', 'test/spec/*.js'])
|
56 | .pipe(eslint())
|
57 | .pipe(eslint.format())
|
58 | .pipe(eslint.failOnError());
|
59 | });
|
60 |
|
61 |
|
62 | gulp.task('copy-slave', () => {
|
63 | return gulp.src('src/worker.browser/slave.js.txt')
|
64 | .pipe(rename('slave.js'))
|
65 | .pipe(gulp.dest('dist/'));
|
66 | });
|
67 |
|
68 |
|
69 | gulp.task('babel-lib', () => {
|
70 | return gulp.src('src/**/*.js')
|
71 | .pipe(sourcemaps.init())
|
72 | .pipe(babel())
|
73 | .pipe(sourcemaps.write('.'))
|
74 | .pipe(gulp.dest('lib/'));
|
75 | });
|
76 |
|
77 | gulp.task('babel-spec', () => {
|
78 | return gulp.src('test/spec/**/*.js')
|
79 | .pipe(babel())
|
80 | .pipe(gulp.dest('test/spec-build'));
|
81 | });
|
82 |
|
83 |
|
84 | gulp.task('browser-slave-module', () => {
|
85 | return gulp.src('./src/worker.browser/slave.js.txt')
|
86 | .pipe(toStringModule())
|
87 | .pipe(rename('slave-code.js'))
|
88 | .pipe(gulp.dest('./lib/worker.browser/'));
|
89 | });
|
90 |
|
91 |
|
92 | gulp.task('browserify-lib', ['babel-lib', 'browser-slave-module'], () => {
|
93 | return browserify({ standalone: 'threads' })
|
94 | .add('./lib/index.js')
|
95 |
|
96 |
|
97 | .require('./lib/worker.browser/worker.js', { expose : './worker' })
|
98 | .require('./lib/defaults.browser.js', { expose : './defaults' })
|
99 | .bundle()
|
100 | .pipe(source('threads.browser.js'))
|
101 | .pipe(gulp.dest('dist/'));
|
102 | });
|
103 |
|
104 | gulp.task('uglify-lib', ['browserify-lib'], () => {
|
105 | return gulp.src('dist/threads.browser.js')
|
106 | .pipe(uglify())
|
107 | .pipe(concat('threads.browser.min.js'))
|
108 | .pipe(gulp.dest('dist/'));
|
109 | });
|
110 |
|
111 | gulp.task('uglify-slave', ['copy-slave'], () => {
|
112 | return gulp.src('dist/slave.js')
|
113 | .pipe(uglify())
|
114 | .pipe(concat('slave.min.js'))
|
115 | .pipe(gulp.dest('dist/'));
|
116 | });
|
117 |
|
118 | gulp.task('uglify', ['uglify-lib', 'uglify-slave']);
|
119 |
|
120 |
|
121 | gulp.task('test-browser', ['dist', 'babel-spec'], done => {
|
122 | runKarma(done);
|
123 | });
|
124 |
|
125 | gulp.task('test-browser-after-node', ['test-node'], done => {
|
126 | runKarma(done);
|
127 | });
|
128 |
|
129 | gulp.task('test-node', ['dist', 'babel-spec'], () => {
|
130 | return gulp.src('test/spec-build/*.spec.js', { read: false })
|
131 | .pipe(mocha());
|
132 | });
|
133 |
|
134 |
|
135 | gulp.task('dist', ['lint', 'browserify-lib', 'uglify']);
|
136 | gulp.task('test', ['test-node', 'test-browser-after-node']);
|
137 |
|
138 | gulp.task('default', ['dist', 'test']);
|