102 lines
2.9 KiB
JavaScript
102 lines
2.9 KiB
JavaScript
const gulp = require('gulp');
|
|
const path = require('path');
|
|
const fs = require('fs-extra');
|
|
const CC = require('@meesvdw/coloredconsole');
|
|
const ts = require('gulp-typescript');
|
|
const concat = require('gulp-concat');
|
|
const cleanCSS = require('gulp-clean-css');
|
|
const uglify = require('gulp-uglify');
|
|
const rename = require('gulp-rename');
|
|
const { argv } = require('process');
|
|
var sass = require('gulp-sass')(require('sass'));
|
|
var tap = require('gulp-tap');
|
|
var browserify = require('browserify');
|
|
var buffer = require('gulp-buffer');
|
|
|
|
exports.default = () => {
|
|
var pageIndex = argv.includes('-page') ? argv.indexOf('-page') : null;
|
|
var pageName = pageIndex != null && pageIndex + 1 < argv.length ? argv[pageIndex + 1] : null;
|
|
|
|
var layoutIndex = argv.includes('-layout') ? argv.indexOf('-layout') : null;
|
|
var layoutName = layoutIndex != null && layoutIndex + 1 < argv.length ? argv[layoutIndex + 1] : null;
|
|
|
|
if (pageName == null && layoutName == null)
|
|
return console.log(
|
|
CC.red +
|
|
CC.bright +
|
|
`\n\nIncorrect syntax. Please use '-page [pagename]' or '-layout [layoutname]'\n\n` +
|
|
CC.reset
|
|
);
|
|
|
|
var directoryType = pageName ? 'Page' : 'Layout';
|
|
var directoryName = pageName ? pageName : layoutName;
|
|
var directoryQuery = pageName ? pageName : `layouts/${layoutName}`;
|
|
|
|
var basePath = path.join(__filename, '..', 'pages', directoryQuery);
|
|
fs.pathExists(basePath, (err, exists) => {
|
|
if (exists == false)
|
|
return console.log(
|
|
CC.red + CC.bright + `\n\n${directoryType} ${directoryName} does not exist\n\n` + CC.reset
|
|
);
|
|
else {
|
|
buildTypescript(basePath, () =>
|
|
buildSass(basePath, () => {
|
|
console.log(CC.green + CC.bright + `Watcher running` + CC.reset);
|
|
gulp.watch(
|
|
[
|
|
`pages/${directoryQuery}/ts/**/*.ts`
|
|
],
|
|
(finish) => {
|
|
console.log(CC.blue + CC.bright + `Typescript change detected` + CC.reset);
|
|
buildTypescript(basePath, finish);
|
|
}
|
|
);
|
|
|
|
gulp.watch(
|
|
[
|
|
`pages/${directoryQuery}/sass/**/*.scss`
|
|
],
|
|
(finish) => {
|
|
console.log(CC.magenta + CC.bright + `Sass change detected` + CC.reset);
|
|
buildSass(basePath, finish);
|
|
}
|
|
);
|
|
})
|
|
);
|
|
}
|
|
});
|
|
};
|
|
|
|
function buildTypescript(basePath, cb) {
|
|
var tsProject = ts.createProject(path.join(basePath, 'tsconfig.json'));
|
|
gulp
|
|
.src(path.join(basePath, 'ts', '**', '*.ts'))
|
|
// .pipe(
|
|
// tap(function(file) {
|
|
// file.contents = browserify(file.path, { debug: true }).bundle();
|
|
// })
|
|
// )
|
|
// .pipe(buffer())
|
|
.pipe(tsProject())
|
|
.js.pipe(concat(`script.js`))
|
|
.pipe(rename(`script.js`))
|
|
.pipe(uglify())
|
|
.pipe(gulp.dest(basePath))
|
|
.on('end', () => {
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function buildSass(basePath, cb) {
|
|
gulp
|
|
.src(path.join(basePath, 'sass', '**', '*.scss'))
|
|
.pipe(sass().on('error', sass.logError))
|
|
.pipe(cleanCSS({ compatibility: 'ie8' }))
|
|
.pipe(concat(`style.css`))
|
|
.pipe(rename(`style.css`))
|
|
.pipe(gulp.dest(basePath))
|
|
.on('end', () => {
|
|
cb();
|
|
});
|
|
}
|