Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 40 additions & 28 deletions gulpfile.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const gulp = require('gulp');
const webpack = require('webpack-stream');
const webpackStream = require('webpack-stream');
const webpackCore = require('webpack');
const env = require('gulp-env');
const merge = require('merge-stream');
const rename = require('gulp-rename');
const through2 = require('through2');
const projects = require('./projects');
Expand All @@ -10,14 +10,18 @@ const processFirebaseRules = require('./tasks/processFirebaseRules');
require('ignore-styles');
require('@babel/polyfill');

const prettyPrintJson = () => through2.obj((file, _, cb) => {
const prettyPrintJson = () => through2.obj((file, enc, cb) => {
if (file.isNull()) {
return cb(null, file);
}
if (file.isBuffer()) {
try {
const jsonContent = JSON.parse(file.contents.toString());
const prettyJson = JSON.stringify(jsonContent, null, 2); // Pretty-print with 2 spaces
const prettyJson = JSON.stringify(jsonContent, null, 2);
file.contents = Buffer.from(prettyJson);
return cb(null, file);
} catch (error) {
return cb(new Error('Invalid JSON format'));
return cb(new Error(`Invalid JSON format in ${file.path}`));
}
}
cb(null, file);
Expand All @@ -29,44 +33,52 @@ async function clean() {
return await deleteAsync([config.output.path]);
}

function buildTask() {
async function prodEnv() {
env({
vars: {
ENV: 'production',
},
});
}

function bundleJS() {
const config = require('./webpack.config.js');
return webpackStream(config, webpackCore)
.pipe(gulp.dest(config.output.path));
}

function copyResetCss() {
const config = require('./webpack.config.js');
return gulp.src('./reset.css', { base: './', allowEmpty: true })
.pipe(gulp.dest(config.output.path));
}

function copyFavicons() {
const config = require('./webpack.config.js');
const projectName = process.env.npm_config_project || 'lszt';
const projectConf = projects.load(projectName);
const faviconPath = `./theme/${projectConf.theme}/favicons/*`;

const bundle = gulp.src('./src/app.js')
.pipe(webpack(config))
.pipe(gulp.dest(config.output.path));

const copy = gulp.src(['./reset.css'], { base: './' })
return gulp.src(faviconPath, { base: `./theme/${projectConf.theme}`, allowEmpty: true })
.pipe(gulp.dest(config.output.path));
}

const favicons = gulp.src(['./theme/' + projectConf.theme + '/favicons/*'], { base: './theme/' + projectConf.theme })
.pipe(gulp.dest(config.output.path));
function buildFirebaseRules() {
const config = require('./webpack.config.js');
const projectName = process.env.npm_config_project || 'lszt';
const projectConf = projects.load(projectName);

const rules = gulp.src(['./firebase-rules-template.json'], { base: './' })
return gulp.src('./firebase-rules-template.json', { allowEmpty: true })
.pipe(processFirebaseRules(projectConf))
.pipe(prettyPrintJson())
.pipe(rename('firebase-rules.json'))
.pipe(gulp.dest(config.output.path));

return merge(bundle, copy, favicons, rules);
}

function prodEnv(done) {
env({
vars: {
ENV: 'production',
},
});
done();
}
const assets = gulp.parallel(copyResetCss, copyFavicons, buildFirebaseRules);

// Export tasks
exports.clean = clean;
exports.build = gulp.series(clean, buildTask);
exports['build:prod'] = gulp.series(prodEnv, clean, buildTask);
exports.build = gulp.series(clean, bundleJS, assets);
exports['build:prod'] = gulp.series(prodEnv, clean, bundleJS, assets);

// Default task
exports.default = exports.build;
Loading