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
104
105
106
107
108
109
110
111
112
113
|
const { exec } = require('child_process');
const fs = require('fs');
const { dest, series, parallel } = require('gulp');
const ts = require('gulp-typescript');
const inject = require('gulp-inject-string');
const sourcemaps = require('gulp-sourcemaps');
const TscWatchClient = require('tsc-watch/client');
const browserify = require('browserify');
const buffer = require('vinyl-buffer');
const source = require('vinyl-source-stream');
function makeWatchCompiler(onFirstSuccess, onSuccess) {
let firstBuild = true;
let lastBundle;
let lastPreloadBundle;
const compileScripts = function () {
const watch = new TscWatchClient();
watch.on('success', () =>
parallel(
makeBrowserifyRenderer(true),
makeBrowserifyPreload(true),
)(async () => {
if (firstBuild) {
firstBuild = false;
onFirstSuccess();
}
let bundle = await fs.promises.readFile('./build/src/renderer/bundle.js');
let preloadBundle = await fs.promises.readFile('./build/src/renderer/preloadBundle.js');
if (
!lastBundle ||
!preloadBundle ||
!lastBundle.equals(bundle) ||
!lastPreloadBundle.equals(preloadBundle)
) {
lastBundle = bundle;
lastPreloadBundle = preloadBundle;
onSuccess();
}
}),
);
watch.start('--noClear', '--sourceMap', '--inlineSources', '--incremental', '--project', '.');
return watch.tsc;
};
compileScripts.displayName = 'compile-scripts-watch';
return compileScripts;
}
function compileScripts() {
const tsProject = ts.createProject('tsconfig.json');
return tsProject
.src()
.pipe(tsProject())
.pipe(inject.replace('process.env.NODE_ENV', '"production"'))
.pipe(dest('build'));
}
function makeBrowserifyRenderer(debug) {
const browserifyRenderer = () => {
let stream = browserify({ entries: './build/src/renderer/index.js', debug })
.bundle()
.pipe(source('bundle.js'))
.pipe(buffer());
if (debug) {
stream = stream.pipe(sourcemaps.init({ loadMaps: true })).pipe(sourcemaps.write());
}
return stream.pipe(dest('./build/src/renderer/'));
};
browserifyRenderer.displayName = 'browserify-renderer';
return browserifyRenderer;
}
function makeBrowserifyPreload(debug) {
const browserifyPreload = () => {
let stream = browserify({
entries: './build/src/renderer/preload.js',
debug,
})
.exclude('electron')
.bundle()
.pipe(source('preloadBundle.js'))
.pipe(buffer());
if (debug) {
stream = stream.pipe(sourcemaps.init({ loadMaps: true })).pipe(sourcemaps.write());
}
return stream.pipe(dest('./build/src/renderer/'));
};
browserifyPreload.displayName = 'browserify-preload';
return browserifyPreload;
}
function buildProto(callback) {
exec('bash ./scripts/build-proto.sh', (err) => callback(err));
}
compileScripts.displayName = 'compile-scripts';
buildProto.displayName = 'build-proto';
exports.build = series(
compileScripts,
parallel(makeBrowserifyPreload(false), makeBrowserifyRenderer(false)),
);
exports.buildProto = buildProto;
exports.makeWatchCompiler = makeWatchCompiler;
|