forked from thegecko/web-bluetooth-dfu
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
103 lines (88 loc) · 2.58 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const path = require("path");
const browserify = require("browserify");
const del = require("del");
const merge = require("merge2");
const buffer = require("vinyl-buffer");
const source = require("vinyl-source-stream");
const gulp = require("gulp");
const sourcemaps = require("gulp-sourcemaps");
const typescript = require("gulp-typescript");
const tslint = require("gulp-tslint");
const uglify = require("gulp-uglify");
// Source
const srcDir = "src";
const srcFiles = srcDir + "/**/*.ts";
// Node
const nodeDir = "lib";
const typesDir = "types";
// Browser bundles
const bundleDir = "dist";
const bundleGlobal = "SecureDfu";
let watching = false;
// Error handler suppresses exists during watch
const handleError = error => {
console.log(error.message);
if (watching) this.emit("end");
else process.exit(1);
}
// Set watching
const taskSetWatchFlag = done => {
watching = true;
done();
};
// Clear built directories
const taskClean = done => {
if (!watching) del([nodeDir, typesDir, bundleDir]);
done();
};
// Lint the source
const taskLint = () => {
return gulp.src(srcFiles)
.pipe(tslint({
formatter: "stylish"
}))
.pipe(tslint.report({
emitError: !watching
}))
};
// Build TypeScript source into CommonJS Node modules
const taskCompile = () => {
var tsResult = gulp.src(srcFiles)
.pipe(sourcemaps.init())
.pipe(typescript.createProject("tsconfig.json")())
.on("error", handleError);
return merge([
tsResult.js.pipe(sourcemaps.write(".", {
sourceRoot: path.relative(nodeDir, srcDir)
})).pipe(gulp.dest(nodeDir)),
tsResult.dts.pipe(gulp.dest(typesDir))
]);
};
// Build CommonJS modules into browser bundles
const taskBundle = () => {
var fileName = bundleGlobal.replace(/([A-Z]+)/g, (match, submatch, offset) => {
return `${offset > 0 ? "-" : ""}${match.toLowerCase()}`;
});
return browserify(nodeDir, {
standalone: bundleGlobal
})
.bundle()
.on("error", handleError)
.pipe(source(`${fileName}.js`))
.pipe(buffer())
.pipe(sourcemaps.init({
loadMaps: true
}))
.pipe(uglify())
.pipe(sourcemaps.write(".", {
sourceRoot: path.relative(bundleDir, nodeDir)
}))
.pipe(gulp.dest(bundleDir));
};
exports.bundle = gulp.series(taskClean, taskCompile, taskBundle);
exports.default = gulp.series(exports.bundle);
const taskSetWatch = done => {
gulp.watch(srcFiles, exports.default);
done();
};
exports.watch = gulp.series(taskSetWatchFlag, exports.default, taskSetWatch);