0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-07 15:39:42 -05:00
penpot/frontend/gulpfile.js

212 lines
4.9 KiB
JavaScript
Raw Normal View History

2016-06-11 13:43:57 -05:00
const autoprefixer = require('gulp-autoprefixer');
const cleancss = require("gulp-clean-css");
2020-01-11 10:28:54 -05:00
const fs = require("fs");
const gulp = require("gulp");
const gulpif = require("gulp-if");
const gzip = require("gulp-gzip");
2020-01-11 10:28:54 -05:00
const l = require("lodash");
const mustache = require("gulp-mustache");
const rename = require("gulp-rename");
const rimraf = require("rimraf");
const scss = require("gulp-sass");
2016-06-11 13:43:57 -05:00
const paths = {};
2016-02-21 09:42:35 -05:00
paths.app = "./resources/";
paths.output = "./resources/public/";
paths.dist = "./target/dist/";
2015-06-18 12:35:50 -05:00
paths.scss = paths.app + "styles/**/*.scss";
2016-06-11 13:43:57 -05:00
/***********************************************
* Helper Tasks
2016-06-11 13:43:57 -05:00
***********************************************/
gulp.task("clean", function(next) {
rimraf(paths.output + "css/", function() {
rimraf(paths.output + "js/", function() {
next()
});
});
});
gulp.task("dist:clean", function(next) {
rimraf(paths.dist, next);
});
2016-04-03 05:19:11 -05:00
function makeAutoprefixer() {
return autoprefixer('last 2 version');
2016-04-03 05:19:11 -05:00
}
function isProduction() {
return (process.env.NODE_ENV === 'production');
}
/***********************************************
* Development
***********************************************/
// Styles
2016-04-03 05:19:11 -05:00
function scssPipeline(options) {
return function() {
const input = options.input;
const output = options.output;
return gulp.src(input)
.pipe(scss({
style: "expanded",
errLogToConsole: false
}).on("error", (err) => {
console.log(err.messageFormatted);
}))
.pipe(makeAutoprefixer())
.pipe(gulpif(isProduction, cleancss()))
.pipe(gulp.dest(output));
};
2016-04-03 05:19:11 -05:00
}
2016-02-21 09:42:35 -05:00
gulp.task("scss:main", scssPipeline({
input: paths.app + "styles/main.scss",
output: paths.output + "css/"
}));
2016-02-21 09:42:35 -05:00
// gulp.task("scss:view", scssPipeline({
// input: paths.app + "styles/view.scss",
// output: paths.output + "css/"
// }));
2016-04-03 05:19:11 -05:00
gulp.task("scss", gulp.parallel("scss:main"));
2016-04-03 05:19:11 -05:00
2020-01-11 10:28:54 -05:00
function readLocales() {
const path = __dirname + "/resources/locales.json";
const content = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}));
let result = {};
for (let key of Object.keys(content)) {
const item = content[key];
if (l.isString(item)) {
result[key] = {"en": item};
} else if (l.isPlainObject(item) && l.isPlainObject(item.translations)) {
result[key] = item.translations;
}
}
return JSON.stringify(result);
}
// Templates
2015-06-18 12:35:50 -05:00
function templatePipeline(options) {
return function() {
const input = options.input;
const output = options.output;
const ts = Math.floor(new Date());
2020-01-11 10:28:54 -05:00
const locales = readLocales();
const tmpl = mustache({
2020-01-11 10:28:54 -05:00
ts: ts,
tr: JSON.stringify(locales),
});
2016-06-11 13:43:57 -05:00
return gulp.src(input)
.pipe(tmpl)
.pipe(rename("index.html"))
.pipe(gulp.dest(output));
};
}
gulp.task("template:main", templatePipeline({
2020-01-11 10:28:54 -05:00
input: paths.app + "templates/index.mustache",
output: paths.output
}));
// gulp.task("template:view", templatePipeline({
// input: paths.app + "templates/view.mustache",
// output: paths.output + "view/"
// }));
gulp.task("templates", gulp.parallel("template:main"));
2016-06-11 13:43:57 -05:00
// Entry Point
gulp.task("watch:main", function() {
gulp.watch(paths.scss, gulp.task("scss"));
2020-01-11 10:28:54 -05:00
gulp.watch([paths.app + "templates/*.mustache",
paths.app + "locales.json"],
gulp.task("templates"));
});
gulp.task("watch", gulp.series(
2020-01-11 10:28:54 -05:00
gulp.parallel("scss", "templates"),
gulp.task("watch:main")
));
2016-06-11 13:43:57 -05:00
/***********************************************
* Production
2016-06-11 13:43:57 -05:00
***********************************************/
gulp.task("dist:clean", function(next) {
rimraf(paths.dist, next);
2016-06-11 13:43:57 -05:00
});
// Templates
2016-06-11 13:43:57 -05:00
gulp.task("dist:template:main", templatePipeline({
input: paths.app + "templates/index.mustache",
output: paths.dist,
}));
2016-06-11 13:43:57 -05:00
// gulp.task("dist:template:view", templatePipeline({
// input: paths.app + "view.mustache",
// output: paths.dist + "view/",
// }));
2016-02-21 09:42:35 -05:00
gulp.task("dist:templates", gulp.parallel("dist:template:main"));
2016-02-21 13:42:01 -05:00
// Styles
2016-06-11 13:43:57 -05:00
gulp.task("dist:scss:main", scssPipeline({
input: paths.app + "styles/main.scss",
output: paths.dist + "css/"
}));
// gulp.task("dist:scss:view", scssPipeline({
// input: paths.app + "styles/view.scss",
// output: paths.dist + "css/"
// }));
gulp.task("dist:scss", gulp.parallel("dist:scss:main"));
// Copy
gulp.task("dist:copy:fonts", function() {
return gulp.src(paths.output + "/fonts/**/*")
.pipe(gulp.dest(paths.dist + "fonts/"));
2016-02-21 11:01:27 -05:00
});
gulp.task("dist:copy:images", function() {
return gulp.src(paths.output + "/images/**/*")
.pipe(gulp.dest(paths.dist + "images/"));
2016-02-21 09:42:35 -05:00
});
2015-06-18 12:35:50 -05:00
2016-06-11 13:43:57 -05:00
gulp.task("dist:copy", gulp.parallel("dist:copy:fonts", "dist:copy:images"));
// GZip
gulp.task("dist:gzip", function() {
return gulp.src(`${paths.dist}**/!(*.gz|*.br|*.jpg|*.png)`)
.pipe(gzip({gzipOptions: {level: 9}}))
.pipe(gulp.dest(paths.dist));
});
// Entry Point
gulp.task("dist", gulp.parallel(
2020-01-11 10:28:54 -05:00
gulp.task("dist:templates"),
gulp.task("dist:scss"),
gulp.task("dist:copy")
));
2015-06-18 12:35:50 -05:00