const pify = require('pify') const gulp = require('gulp') const sass = require('gulp-sass') sass.compiler = require('node-sass') const autoprefixer = require('gulp-autoprefixer') const gulpStylelint = require('gulp-stylelint') const watch = require('gulp-watch') const sourcemaps = require('gulp-sourcemaps') const rtlcss = require('gulp-rtlcss') const rename = require('gulp-rename') const pump = pify(require('pump')) const { createTask } = require('./task') // scss compilation and autoprefixing tasks module.exports = createStyleTasks function createStyleTasks({ livereload }) { const prod = createTask( 'styles:prod', createScssBuildTask({ src: 'ui/app/css/index.scss', dest: 'ui/app/css/output', devMode: false, }), ) const dev = createTask( 'styles:dev', createScssBuildTask({ src: 'ui/app/css/index.scss', dest: 'ui/app/css/output', devMode: true, pattern: 'ui/app/**/*.scss', }), ) const lint = createTask('lint-scss', function () { return gulp.src('ui/app/css/itcss/**/*.scss').pipe( gulpStylelint({ reporters: [{ formatter: 'string', console: true }], fix: true, }), ) }) return { prod, dev, lint } function createScssBuildTask({ src, dest, devMode, pattern }) { return async function () { if (devMode) { watch(pattern, async (event) => { await buildScss() livereload.changed(event.path) }) } await buildScss() } async function buildScss() { await Promise.all([ buildScssPipeline(src, dest, devMode, false), buildScssPipeline(src, dest, devMode, true), ]) } } } async function buildScssPipeline(src, dest, devMode, rtl) { await pump( ...[ // pre-process gulp.src(src), devMode && sourcemaps.init(), sass().on('error', sass.logError), autoprefixer(), rtl && rtlcss(), rtl && rename({ suffix: '-rtl' }), devMode && sourcemaps.write(), gulp.dest(dest), ].filter(Boolean), ) }