/* * 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; let css = [], 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, '!' + paths.src.magico_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(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 buildJS() { js = new Set(js) if ([...js].length) { return gulp .src([...js]) .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 buildVendorJS() { vendor_js = new Set(vendor_js) if ([...vendor_js].length) { return gulp .src([...vendor_js]) .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, buildVendorCSS, buildJS, buildVendorJS, svgCompiler, copeImages, copySkippedFiles, copySkippedNodeFiles, copyDependencies, copyFavicon));