You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Engine_Rebuild/gulpfile.js

131 lines
3.8 KiB
JavaScript

const {src, dest, series} = require('gulp');
const del = require('del');
const ts = require('gulp-typescript');
const exec = require('child_process').exec;
const sass = require('gulp-sass');
const fs = require('fs');
const path = require('path');
sass.compiler = require('node-sass');
let tsSource = ts.createProject('tsconfig.json')
function clean(cb) {
del(['build/*']);
del(['out/*']);
cb();
}
function validateConfigSources(cb) {
console.log("Validating source json files...");
let confBase = "src/assets/conf/";
let configsToCheck = ["resources-landing-page.json"];
for (let i = 0, l = configsToCheck.length; i < l; i++) {
let currConfig = configsToCheck[i];
let configContent = fs.readFileSync(path.join(confBase, currConfig));
let conf = JSON.parse(configContent.toString());
let keys = Object.keys(conf);
let fileSpecificRules = validationRules[currConfig];
for (let j = 0, m = keys.length; j < m; j++) {
let key = keys[i];
let content = conf[key];
let rules = fileSpecificRules[key];
let ruleKeys = Object.keys(rules);
for (let k = 0, n = ruleKeys.length; k < n; k++) {
let rule = ruleKeys[k];
let ruleValidator = rules[rule];
for (let x = 0, y = content.length; x < y; x++) {
let renderObj = content[x];
let ruleSubject = renderObj[rule];
let validResults = ruleValidator(ruleSubject, currConfig, rule);
if (null !== validResults) {
cb(validResults);
}
}
}
}
}
cb();
}
let deploy = () => {
};
function conf() {
return src(['src/assets/**/*', '!src/assets/**/*.scss'], {base: 'src/assets'})
.pipe(dest('build/assets/'));
}
function style() {
return src('node_modules/bootstrap/dist/css/bootstrap.css')
.pipe(dest('build/assets/pages/styles/'));
}
function scss() {
return src('src/assets/pages/styles/*.scss',)
.pipe(sass.sync().on('error', sass.logError))
.on('error', () => {
process.exit(1)
})
.pipe(dest('build/assets/pages/styles/'));
}
function tests() {
return src('tests/*',)
.pipe(dest('build/tests/'));
}
function root() {
return src('src/*.js')
.pipe(dest('build/'));
}
function pkg() {
return src('package*')
.pipe(dest('build/'));
}
function typescript() {
return tsSource.src()
.pipe(tsSource()).on('error', () => {
process.exit(1)
})
.js
.pipe(dest('build/util/'));
}
function dependencies(cb) {
// Installs dependencies into build folder
exec('npm --prefix ./build install ./build --production', './node_modules/.bin/electron-rebuild -m ./build/node_modules',
(err, stdout, stderr) => {
console.log(stdout);
console.log(stderr)
cb(err);
});
}
let stringLengthRule = function (str, fileName, rulename) {
let maxLen = 124;
if (str.length > maxLen) {
return Error(`Content too long in ${fileName}:${rulename}! Expected maximum of ${maxLen} characters, got ${str.length} "${str}"`)
}
}
let validationRules = {
"resources-landing-page.json": {
"grid-container": {
"description": stringLengthRule
}
}
}
exports.clean = clean;
exports.default = series(validateConfigSources, conf, style, scss, root, pkg, typescript, dependencies);
exports.tests = series(validateConfigSources, conf, style, scss, root, pkg, typescript, dependencies, tests);
exports.runFast = series(validateConfigSources, conf, style, scss, root, pkg)
exports.deploy = series(clean, validateConfigSources, conf, style, scss, root, pkg, typescript, dependencies, deploy);