'use strict' const { parallel, series, tree, watch } = require('gulp') const task = require('./lib/task') const bundleName = 'ui' const buildDir = 'build' const previewSrcDir = 'preview-src' const previewDestDir = 'public' const srcDir = 'src' const destDir = `${previewDestDir}/_` const { reload: livereload } = process.env.LIVERELOAD === 'true' ? require('gulp-connect') : {} const { remove, lintCss, lintJs, format, build, pack, previewPages, serve } = require('./tasks') const glob = { all: [srcDir, previewSrcDir], css: `${srcDir}/css/**/*.css`, js: ['gulpfile.js/**/*.js', `${srcDir}/{helpers,js}/**/*.js`], } const cleanTask = task({ name: 'clean', desc: 'Clean files and folders generated by build', call: remove(['build', 'public']), }) const lintCssTask = task({ name: 'lint:css', desc: 'Lint the CSS source files using stylelint (standard config)', call: lintCss(glob.css), }) const lintJsTask = task({ name: 'lint:js', desc: 'Lint the JavaScript source files using eslint (JavaScript Standard Style)', call: lintJs(glob.js), }) const lintTask = task({ name: 'lint', desc: 'Lint the CSS and JavaScript source files', call: parallel(lintCssTask, lintJsTask), }) const formatTask = task({ name: 'format', desc: 'Format the JavaScript source files using prettify (JavaScript Standard Style)', call: format(glob.js), }) const buildTask = task({ name: 'build', desc: 'Build and stage the UI assets for bundling', call: build(srcDir, destDir, tree().nodes.some((name) => ~name.indexOf('preview'))), }) const bundleBuildTask = task({ name: 'bundle:build', call: series(cleanTask, lintTask, buildTask), }) const bundlePackTask = task({ name: 'bundle:pack', desc: 'Create a bundle of the staged UI assets for publishing', call: pack(destDir, buildDir, bundleName), }) const bundleTask = task({ name: 'bundle', desc: 'Clean, lint, build, and bundle the UI for publishing', call: series(bundleBuildTask, bundlePackTask), }) const previewPagesTask = task({ name: 'preview:pages', call: previewPages(srcDir, previewSrcDir, previewDestDir, livereload), }) const previewBuildTask = task({ name: 'preview:build', desc: 'Process and stage the UI assets and generate pages for the preview', call: parallel(buildTask, previewPagesTask), }) const previewServeTask = task({ name: 'preview:serve', call: serve(previewDestDir, { port: 5252, livereload }, () => watch(glob.all, previewBuildTask)), }) const previewTask = task({ name: 'preview', desc: 'Generate a preview site and launch a server to view it', call: series(previewBuildTask, previewServeTask), }) module.exports = require('./lib/export-tasks')( bundleTask, cleanTask, lintTask, formatTask, buildTask, bundleTask, bundlePackTask, previewTask, previewBuildTask )