/* * Gulp Builder (Build) * @version: 1.0.0 (Fri, 08 May 2020) * @author: HtmlStream * @license: Htmlstream (https://htmlstream.com/licenses) * Copyright 2020 Htmlstream */ const del = require('del'); const { config, context, pathLevel, shieldingVariables, shieldingFunctions, additionNames, gulpLighten, gulpDarken, gulpRGBA } = require('./core'); const paths = require('./paths'); const {svgCompiler} = require('./svg-compiler') const gulp = require('gulp'); const fileinclude = require('gulp-file-include'); const replace = require('gulp-replace'); const deleteLines = require('gulp-delete-lines'); const concat = require('gulp-concat'); const cleanCSS = require('gulp-clean-css'); const uglify = require('gulp-uglify-es').default; const rtlcss = require("gulp-rtlcss"); const rename = require('gulp-rename'); const prettify = require("gulp-prettify"); let css = [], minifyCSSFiles = [], js = [], vendor_css = [], vendor_js = [], skippedNodeFiles = [], skippedFiles = [], images = []; function fileInclude() { return gulp .src([ paths.build.html.files, '!' + paths.src.assets.files, '!' + paths.src.tmp.files, '!' + paths.src.partials.files ]) .pipe(replace(/@@autopath/g, function (match) { return pathLevel(this.file) })) .pipe(fileinclude({ prefix: '@@', basepath: '@file', indent: true, context: context })) .pipe(replace(/@@autopath/g, function (match) { return pathLevel(this.file) })) .pipe(replace(new RegExp('(.*?)(\\.+\\/)+' + `(${additionNames.vendor}|node_modules)` + '\/.*\\.(js|css)', 'g'), function (match, p1, p2, p3, p4) { if (p1.search(/(>|<|/g, function (math, p1, p2) { return ``; })) .pipe(replace(//g, function (math, p1, p2) { return ``; })) .pipe(replace(//g, function (math, p1, p2) { return ``; })) .pipe(replace(//g, function (math, p1, p2) { return ``; })) .pipe(replace(/(\[\@\@\]).*?/g, function (match, p1) { return shieldingVariables(match, p1); })) .pipe(replace(/(\[@\@F\]).*?/g, function (match, p1) { return shieldingFunctions(match, p1); })) .pipe(replace(/\<\/head\>/g, function (math, p1) { const visablilityStyles = `` return ` ${!config.layoutBuilder.extend.switcherSupport ? visablilityStyles : ''} ` })) .pipe(replace(/\<\!\-\- ONLY DEV \-\-\>(.|\n)*?\<\!\-\- END ONLY DEV \-\-\>\s+/g, '')) .pipe(replace(/\/\/ ONLY DEV(.|\n)*?\/\/ END ONLY DEV\s+/g, '')) .pipe(prettify({ indent_inner_html: false, unformatted: ['pre', 'code', 'script'], preserve_newlines: true })) .pipe(gulp.dest(paths.build.base.dir)) }; function buildCSS() { css = new Set(css) if ([...css].length) { return gulp .src([...css]) .pipe(cleanCSS({compatibility: 'ie11'})) .pipe(concat(config.fileNames.build.css)) .pipe(gulp.dest(paths.build.css.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function buildMinifyCSSFiles() { minifyCSSFiles = new Set(minifyCSSFiles) if ([...minifyCSSFiles].length) { return gulp .src([...minifyCSSFiles]) .pipe(cleanCSS({compatibility: 'ie11'})) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest(paths.build.css.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function buildJS() { js = new Set(js) if ([...js].length) { return gulp .src([...js], { allowEmpty: true, }) .pipe(concat(config.fileNames.build.js)) .pipe(uglify()) .pipe(gulp.dest(paths.build.js.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function buildVendorCSS() { vendor_css = new Set(vendor_css) if ([...vendor_css].length) { return gulp .src([...vendor_css]) .pipe(cleanCSS({compatibility: 'ie11'})) .pipe(concat(config.fileNames.build.vendorCSS)) .pipe(gulp.dest(paths.build.css.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function rtlCSS() { return gulp .src(paths.build.build.css) .pipe(rtlcss()) .pipe(cleanCSS({compatibility: 'ie11'})) .pipe(rename({suffix: '-rtl'})) .pipe(gulp.dest(paths.build.build.css)) } function buildVendorJS() { vendor_js = new Set(vendor_js) if ([...vendor_js].length) { return gulp .src([...vendor_js], { allowEmpty: true, }) .pipe(concat(config.fileNames.build.vendorJS)) .pipe(uglify()) .pipe(gulp.dest(paths.build.js.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function copeImages() { images = new Set(images) if ([...images].length) { return gulp .src([...images]) .pipe(gulp.dest(paths.build.base.dir)); } else { return new Promise(function (resolve, reject) { resolve(); }); } } function copySkippedFiles() { skippedFiles = new Set(skippedFiles) if ([...skippedFiles].length) { return gulp .src([...skippedFiles]) .pipe(gulp.dest(paths.build.base.dir)) } else { return new Promise(function (resolve, reject) { resolve(); }); } } function copySkippedNodeFiles() { skippedNodeFiles = new Set(skippedNodeFiles) if ([...skippedNodeFiles].length) { return gulp .src([...skippedNodeFiles]) .pipe(gulp.dest(paths.build.vendor.dir)) } else { return new Promise(function (resolve, reject) { resolve(); }); } } function copyDependencies() { for (var k in config.copyDependencies.build) { path = k; if (k.search('node_modules') !== 0) { path = './src' + '/' + k } gulp .src(path) .pipe(gulp.dest(paths.build.base.dir + '/' + config.copyDependencies.build[k])) } return new Promise(function (resolve, reject) { resolve(); }); } function copyFavicon() { return gulp .src(paths.src.base.dir + "/favicon.ico") .pipe(gulp.dest(paths.build.base.dir)); } function clean() { return del(paths.build.base.dir, {force: true}); } gulp.task('build', gulp.series(clean, fileInclude, buildCSS, buildMinifyCSSFiles, buildVendorCSS, buildJS, buildVendorJS, svgCompiler, copeImages, copySkippedFiles, copySkippedNodeFiles, copyDependencies, copyFavicon));