const {src, dest, series, parallel} = require('gulp') const fs = require('fs') const path = require('path') const concat = require('gulp-concat') const sourcemaps = require('gulp-sourcemaps') const babel = require('gulp-babel') const uglify = require('gulp-uglify') const rename = require('gulp-rename') const merge = require('merge-stream') const sass = require('gulp-dart-sass') let base_dir_js = 'resources/assets/scripts/' let output_dir_js = 'public/assets/scripts/' function getFolders(dir) { return fs.readdirSync(dir) .filter(function(file) { return fs.statSync(path.join(dir, file)).isDirectory() }) } function bundle_base_js(done) { return src(base_dir_js + '*.js') .pipe(concat('main.js')) .pipe(dest(output_dir_js)) .pipe(sourcemaps.init({loadMaps: true})) .pipe(babel()) .pipe(uglify()) .pipe(rename('main.min.js')) .pipe(sourcemaps.write('./')) .pipe(dest(output_dir_js)) } function bundle_js(done) { let folders = getFolders(base_dir_js) let tasks = folders.map(function(folder) { return src(path.join(base_dir_js, folder, '**/*.js')) .pipe(concat(folder + '.js', {newLine: ';'})) .pipe(dest(output_dir_js)) .pipe(sourcemaps.init({loadMaps: true})) .pipe(babel()) .pipe(uglify()) .pipe(rename(folder + '.min.js')) .pipe(sourcemaps.write('./')) .pipe(dest(output_dir_js)) }) return merge(tasks) } let base_dir_sass = 'resources/assets/sass/' let output_dir_css = 'public/assets/styles/' function bundle_base_sass(done) { return src([base_dir_sass + '*.scss', '!' + base_dir_sass + '_*.scss']) .pipe(sass()) .pipe(rename({extname: '.css'})) .pipe(dest(output_dir_css)) .pipe(sourcemaps.init({loadMaps: true})) .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) .pipe(rename({extname: '.min.css'})) .pipe(sourcemaps.write('./')) .pipe(dest(output_dir_css)) } exports.default = series(bundle_base_js, bundle_js, bundle_base_sass)