"use strict"; var gulp = require('gulp'); var rename = require("gulp-rename"); var ignore = require('gulp-ignore'); var plumber = require('gulp-plumber'); var babel = require('gulp-babel'); var concat = require('gulp-concat'); var chmod = require('gulp-chmod'); var map = require('gulp-sourcemaps'); var gulpSequence = require('gulp-sequence'); var less = require('gulp-less'); var uglifycss = require('gulp-cssnano'); var ts = require('gulp-typescript'); var uglifyjs = require('gulp-uglify'); gulp.task('default', ['css', 'pages', 'scripts']); gulp.task('scripts', gulpSequence(['ts', 'babel'], 'js')); gulp.task('pages', ['pages-css', 'pages-babel', 'pages-ts']); //region Task Less/CSS gulp.task( 'css', () => gulp .src("less/style.less") .pipe(plumber()) .pipe(map.init()) .pipe(less()) .pipe(rename('style.css')) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest("build/")) .pipe(ignore.exclude('*.map')) .pipe(uglifycss()) .pipe(rename('style.min.css')) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest("build/")) ); //endregion //region Task Less/CSS for pages gulp.task( 'pages-css', () => gulp .src('less/pages/*.less') .pipe(plumber()) .pipe(map.init({loadMaps: true})) .pipe(less()) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) .pipe(ignore.exclude('*.map')) .pipe(uglifycss()) .pipe(rename({ suffix: '.min' })) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) ); //endregion //region Task Typescript gulp.task( 'ts', () => gulp .src(['ts/*.ts', '!ts/*.d.ts']) .pipe(plumber()) .pipe(map.init()) .pipe(ts({"target": "ES5"})) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('js/ts/')) ); //endregion //region Task Typescript for pages gulp.task( 'pages-ts', () => gulp .src(['js/pages/*.ts', '!js/pages/*.d.ts']) .pipe(plumber()) .pipe(map.init()) .pipe(ts({"target": "ES5"})) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) .pipe(ignore.exclude('*.map')) .pipe(uglifyjs()) .pipe(rename({ suffix: '.min' })) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) ); //endregion //region Task ES6/babel gulp.task( 'babel', () => gulp .src([ 'js/app/**/*.js', 'js/user/**/*.js' ]) .pipe(plumber()) .pipe(map.init({loadMaps: true})) .pipe(concat('babeled.js')) .pipe(babel({ compact: false, presets: [['@babel/env', { "targets": { "browsers": [">0.25%"] } }]] })) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest("build/")) ); //endregion //region Task ES6/Babel for pages gulp.task( 'pages-babel', () => gulp .src('js/pages/*.js') .pipe(plumber()) .pipe(map.init({loadMaps: true})) .pipe(babel({ compact: false, presets: [['@babel/env', { "targets": { "browsers": [">0.25%"] } }]] })) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) .pipe(ignore.exclude('*.map')) .pipe(uglifyjs()) .pipe(rename({ suffix: '.min' })) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest('../../public/build/pages/')) ); //endregion //region Task Concat javascripts gulp.task( 'js', () => gulp .src([ "js/components/jquery.js", "js/components/jquery.ui/widget.js", "js/components/jquery.ui/mouse.js", 'js/components/**/*.js', 'js/ts/**/*.js', 'build/babeled.js' ]) .pipe(plumber()) .pipe(map.init({loadMaps: true})) .pipe(concat('app.js')) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest("build/")) .pipe(ignore.exclude('*.map')) .pipe(uglifyjs()) .pipe(rename('app.min.js')) .pipe(map.write('./')) .pipe(chmod(0o644)) .pipe(gulp.dest("build/")) ); //endregion //region Watch(er) task gulp.task('watch', gulpSequence('default', 'watching')); gulp.task('watching', function() { gulp.watch(['less/*.less', 'less/*/*.less', 'less/*/*.css'] , ['css']); gulp.watch(['js/components/**/*.js'] , ['js']); gulp.watch(['js/app/**/*.js', 'js/user/**/*.js'] , gulpSequence('babel', 'js')); gulp.watch(['ts/**/*.ts'] , gulpSequence('ts', 'js')); gulp.watch(['js/pages/*.ts'] , ['pages-ts']); gulp.watch(['js/pages/*.js'] , ['pages-babel']); }); //endregion