HEX
Server: LiteSpeed
System: Linux premium260.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User: aliazzsr (627)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: //home/aliazzsr/html.vqode.com/Kupi/Code/gulpfile.js
const { src, dest, task, watch, series, parallel } = require('gulp');
const options = require("./package.json").options; 
const browserSync = require('browser-sync').create();
const sass = require('gulp-sass');
const concat = require('gulp-concat');
const postcss = require('gulp-postcss');
const purify = require('gulp-purifycss');
const uglify = require('gulp-uglify');
const imagemin = require('gulp-imagemin');
const purgecss = require('gulp-purgecss');
const cleanCSS = require('gulp-clean-css');
const del = require('del');
const logSymbols = require('log-symbols');
const markdown = require('gulp-markdown');
const fileinclude = require('gulp-file-include');
const cache = require('gulp-cache');

class TailwindExtractor {
  static extract(content) {
    return content.match(/[A-Za-z0-9-_:\/]+/g) || [];
  }
}

//Load Previews on Browser on dev
task('livepreview', (done) => {
    browserSync.init({
        server: {
            baseDir: options.paths.dist.base
        },
        port: 8080,
        https: true,    
        notify: false,
        open: false,
    });
    done();
});

//Reload functions which triggers browser reload
function previewReload(done){
    console.log("\n\t" + logSymbols.info,"Reloading Preview.\n");
    browserSync.reload();
    cache.clearAll(done);
    done();
}

task('dev-html', () => {
    return src(options.paths.src.base+'/views/*.html')
           .pipe(fileinclude({prefix: '@'}))
           .pipe(dest(options.paths.dist.base));
}); 

task('build-html', () => {
    return src(options.paths.src.base+'/views/*.html')
            .pipe(fileinclude({prefix: '@'}))
            .pipe(dest(options.paths.build.base));
}); 

task('readme' , () => {
    return src('README.md')
            .pipe(markdown())
            .pipe(dest(options.paths.dist.base)); 
});

//Compiling styles
task('dev-styles', ()=> {
    var tailwindcss = require('tailwindcss'); 
    return src(options.paths.src.css + '/**/*')         
        .pipe(sass().on('error', sass.logError))        
        .pipe(postcss([
            tailwindcss(options.config.tailwindjs),
            require('autoprefixer'),
        ]))
        .pipe(concat({ path: 'style.css'}))
        .pipe(dest(options.paths.dist.css));
});

//Compiling styles
task('build-styles', ()=> {
    return src(options.paths.dist.css + '/**/*')
        .pipe(purgecss({
            content: ["src/views/**/*.html","src/**/.*js"],
            extractors: [{
                extractor: TailwindExtractor,
                extensions: ['html']
            }]
        }))
        .pipe(cleanCSS({compatibility: 'ie8'}))
        .pipe(dest(options.paths.build.css));
});

//merging all script files to a single file
task('dev-scripts' ,()=> {
    return src([options.paths.src.js + '/libs/**/*.js',options.paths.src.js + '/**/*.js'])
           .pipe(concat({ path: 'scripts.js'}))
           .pipe(dest(options.paths.dist.js));
});


//merging all script files to a single file
task('build-scripts' ,()=> {
    return src([options.paths.src.js + '/libs/**/*.js',options.paths.src.js + '/**/*.js'])
           .pipe(concat({ path: 'scripts.js'}))
        //    .pipe(uglify())
           .pipe(dest(options.paths.build.js));
});

task('dev-imgs', (done) =>{
    src(options.paths.src.img + '/**/*')
    .pipe(dest(options.paths.dist.img));
    done();
});

task('build-imgs', (done) =>{
    src(options.paths.src.img + '/**/*')
    .pipe(imagemin())
    .pipe(dest(options.paths.build.img));
    done();
});


//Watch files for changes
task('watch-changes', (done) => {

    //Watching HTML Files edits
    watch(options.config.tailwindjs,series('dev-styles',previewReload));

    //Watching HTML Files edits
    watch(options.paths.src.base+'/views/**/*.html',series('dev-styles','dev-html',previewReload));

    //Watching css Files edits
    watch(options.paths.src.css+'/**/*',series('dev-styles',previewReload));

    //Watching JS Files edits
    watch(options.paths.src.js+'/**/*.js',series('dev-scripts',previewReload));

    //Watching Img Files updates
    watch(options.paths.src.img+'/**/*',series('dev-imgs',previewReload));    

    console.log("\n\t" + logSymbols.info,"Watching for Changes made to files.\n");

    done();
});

//Cleaning dist folder for fresh start
task('clean:dist', ()=> {
    console.log("\n\t" + logSymbols.info,"Cleaning dist folder for fresh start.\n");
    return del(['dist']);
});

//Cleaning build folder for fresh start
task('clean:build', ()=> {
    console.log("\n\t" + logSymbols.info,"Cleaning build folder for fresh start.\n");
    return del(['build']);
});

//series of tasks to run on dev command
task('development', series('clean:dist','dev-html','dev-styles','dev-scripts','dev-imgs',(done)=>{
    console.log("\n\t" + logSymbols.info,"npm run dev is complete. Files are located at ./dist\n");
    done();
}));

task('optamizedBuild', series('clean:build','build-html','dev-styles','build-styles','build-scripts','build-imgs',(done)=>{
    console.log("\n\t" + logSymbols.info,"npm run build is complete. Files are located at ./build\n");
    done();
}));


exports.default = series('development','livepreview','watch-changes');
exports.build = series('optamizedBuild');