-
Notifications
You must be signed in to change notification settings - Fork 1
/
gulpfile.mjs
118 lines (104 loc) · 3.12 KB
/
gulpfile.mjs
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
114
115
116
117
/* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-var-requires */
import { deleteAsync } from "del";
import log from "fancy-log";
import fs from "fs";
import gulp from "gulp";
import eslint from "gulp-eslint";
import jeditor from "gulp-json-editor";
import compiler from "webpack";
import webpack from "webpack-stream";
const {
dest,
parallel,
series,
src,
watch
} = gulp;
const appName = "dev.fernhomberg.streamdeck.homematic.sdPlugin";
const rootDistFolder = `dist/${appName}`;
const srcDistFolder = `${rootDistFolder}`;
const assetDistFolder = `${rootDistFolder}/assets`;
function clean() {
return deleteAsync([`${rootDistFolder}/**/*`]);
}
function lint() {
return src(["src/**/*.ts", "src/**/*.tsx"])
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
}
async function buildTypeScript() {
try {
const webpackConfig = await import("./webpack.config.js");
return new Promise((resolve, reject) => {
src("./src/app.ts")
.pipe(webpack(webpackConfig.default, compiler))
.on("error", function(err) {
log.error(`An error occurred during the webpack task: ${err.message}`, err);
this.emit("end"); // Ensure that Gulp knows the task has ended in case of error
reject(err); // Reject the Promise on error
})
.pipe(dest(srcDistFolder))
.on("end", resolve); // Resolve the Promise when the stream ends
});
} catch (err) {
log.error(`An error occurred in buildTypeScript: ${err.message}`, err);
throw err; // Re-throw the error to be caught by Gulp's task system
}
}
function copyHtml() {
return src(["src/**/*.html", "src/**/*.css", "src/**/*.svg"])
.pipe(dest(rootDistFolder));
}
function copyManifest() {
return src("./manifest.json")
.pipe(jeditor((json) => {
const packageDefinition = JSON.parse(fs.readFileSync("./package.json"));
json.Version = packageDefinition.version;
json["$schema"] = undefined;
log.info(`Updated version information in manifest to ${packageDefinition.version}`);
return json;
}))
.pipe(dest(rootDistFolder));
}
function copyAssets() {
return src("assets/**/*.png")
.pipe(dest(assetDistFolder));
}
function copyToAppData() {
return src(`${rootDistFolder}/**/*.*`)
.pipe(dest(`${process.env.HOME}\\AppData\\Roaming\\Elgato\\StreamDeck\\Plugins\\${appName}`));
}
const build = series(
clean,
parallel(
series(
lint,
buildTypeScript
),
copyHtml,
copyManifest,
copyAssets
)
);
const watcher = () => {
return watch(
[
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.html",
"src/**/*.css",
"src/**/*.svg",
"./manifest.json",
"./package.json",
"assets/**/*.png"
],
series(build, copyToAppData)
);
};
export {
build,
lint,
watcher as watch
};