2016-02-26 15:36:00 +00:00
|
|
|
var gulp = require("gulp");
|
2017-02-09 11:45:42 +00:00
|
|
|
var gutil = require("gulp-util");
|
2016-02-26 15:36:00 +00:00
|
|
|
var clean = require("gulp-clean");
|
|
|
|
var newer = require("gulp-newer");
|
2017-02-10 14:36:38 +00:00
|
|
|
var fs = require("fs");
|
2017-03-04 19:35:26 +00:00
|
|
|
var Promise = require("bluebird");
|
2017-02-10 14:36:38 +00:00
|
|
|
var request = require("request-promise");
|
|
|
|
var unzip = require("unzipper");
|
2017-02-09 11:45:42 +00:00
|
|
|
var webpack = require("webpack");
|
|
|
|
|
2016-10-24 00:35:58 +00:00
|
|
|
var icons = require("./gulpfile-icons");
|
2017-02-09 11:45:42 +00:00
|
|
|
var webpackConfig = require("./webpack.config.js");
|
2016-02-26 15:36:00 +00:00
|
|
|
|
2017-02-09 11:45:42 +00:00
|
|
|
let webpackCompiler = webpack(webpackConfig);
|
2016-02-26 15:36:00 +00:00
|
|
|
|
2017-02-21 23:55:11 +00:00
|
|
|
const staticFrontendFile = `${__dirname}/build/frontend.js`;
|
|
|
|
const staticClientFile = `${__dirname}/build/client.js`;
|
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
function pipe(source, ...transformers) {
|
|
|
|
let current = source;
|
|
|
|
for (const transformer of transformers) {
|
|
|
|
current.on("error", (e) => {
|
|
|
|
transformer.emit("error", e);
|
|
|
|
});
|
|
|
|
current = current.pipe(transformer);
|
|
|
|
}
|
|
|
|
return current;
|
|
|
|
}
|
2016-02-26 15:36:00 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
function doClean() {
|
|
|
|
return pipe(
|
2016-02-26 15:36:00 +00:00
|
|
|
gulp.src("build"),
|
|
|
|
clean()
|
|
|
|
);
|
2018-12-26 03:42:45 +00:00
|
|
|
}
|
2016-02-26 15:36:00 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
async function downloadIcons() {
|
|
|
|
const exists = await new Promise((resolve) => {
|
|
|
|
fs.exists("build/Open-SVG-Map-Icons", resolve);
|
|
|
|
});
|
2017-02-10 14:36:38 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
if(exists)
|
|
|
|
return;
|
2017-02-10 14:36:38 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
let extract = unzip.Extract({
|
|
|
|
path: "build/"
|
|
|
|
});
|
2017-02-10 14:36:38 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
let download = request.get("https://github.com/twain47/Open-SVG-Map-Icons/archive/master.zip");
|
|
|
|
download.pipe(extract);
|
|
|
|
download.catch((err) => {
|
|
|
|
extract.emit("error", err);
|
2017-02-10 14:36:38 +00:00
|
|
|
});
|
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
await extract.promise();
|
|
|
|
|
|
|
|
await Promise.promisify(fs.rename)("build/Open-SVG-Map-Icons-master", "build/Open-SVG-Map-Icons");
|
|
|
|
}
|
|
|
|
|
|
|
|
function compileIcons() {
|
|
|
|
return pipe(
|
2018-01-27 18:41:31 +00:00
|
|
|
gulp.src(["build/Open-SVG-Map-Icons/svg/**/*.svg", "assets/icons/**/*.svg"]),
|
2016-10-24 00:35:58 +00:00
|
|
|
newer("build/icons.js"),
|
2018-01-27 18:41:31 +00:00
|
|
|
icons("icons.js", "angular.module(\"facilmap\").constant(\"fmIconsRaw\", %s);"),
|
2016-10-24 00:35:58 +00:00
|
|
|
gulp.dest("build")
|
|
|
|
);
|
2018-12-26 03:42:45 +00:00
|
|
|
}
|
2016-10-24 00:35:58 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
const doIcons = gulp.series(downloadIcons, compileIcons);
|
|
|
|
|
|
|
|
function doWebpack() {
|
2017-03-04 19:35:26 +00:00
|
|
|
return Promise.promisify(webpackCompiler.run.bind(webpackCompiler))().then(function(stats) {
|
2017-02-10 14:54:11 +00:00
|
|
|
gutil.log("[webpack]", stats.toString());
|
|
|
|
|
|
|
|
if(stats.compilation.errors && stats.compilation.errors.length > 0)
|
|
|
|
throw new gutil.PluginError("webpack", "There were compilation errors.");
|
2017-02-21 23:55:11 +00:00
|
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
fs.exists(staticFrontendFile, resolve);
|
|
|
|
}).then((exists) => {
|
|
|
|
if(exists)
|
2017-03-04 19:35:26 +00:00
|
|
|
return Promise.promisify(fs.unlink)(staticFrontendFile);
|
2017-02-21 23:55:11 +00:00
|
|
|
}).then(() => {
|
|
|
|
// Create symlink with fixed file name so that people can include https://facilmap.org/frontend.js
|
2017-03-04 19:35:26 +00:00
|
|
|
return Promise.promisify(fs.symlink)(`frontend-index-${stats.hash}.js`, `${__dirname}/build/frontend.js`);
|
2017-02-21 23:55:11 +00:00
|
|
|
});
|
|
|
|
});
|
2018-12-26 03:42:45 +00:00
|
|
|
}
|
2017-02-21 23:55:11 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
function doSymlinks() {
|
2017-02-21 23:55:11 +00:00
|
|
|
// Create symlink to facilmap-client so that people can include https://facilmap.org/client.js
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
fs.exists(staticClientFile, resolve);
|
|
|
|
}).then((exists) => {
|
|
|
|
if(!exists)
|
2017-03-04 19:35:26 +00:00
|
|
|
return Promise.promisify(fs.symlink)(require.resolve("facilmap-client/build/client"), staticClientFile);
|
2017-02-21 23:55:11 +00:00
|
|
|
});
|
2018-12-26 03:42:45 +00:00
|
|
|
}
|
2017-02-09 11:45:42 +00:00
|
|
|
|
2018-12-26 03:42:45 +00:00
|
|
|
function doWatch() {
|
2017-02-09 11:45:42 +00:00
|
|
|
webpackCompiler.watch({
|
|
|
|
}, function(err, stats) {
|
|
|
|
gutil.log("[webpack]", err ? err : stats.toString());
|
2018-12-26 03:42:45 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports.default = gulp.series(doIcons, doWebpack, doSymlinks);
|
|
|
|
module.exports.icons = doIcons;
|
|
|
|
module.exports.watch = gulp.series(doIcons, doWatch);
|
|
|
|
module.exports.clean = doClean;
|