@omnia/tooling
Version:
Provide basic stuffs extensible for omnia extension.
111 lines (110 loc) • 3.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var core = require("./core");
exports.core = core;
var utils = require("./utils");
exports.utils = utils;
var fs = require('fs'), processPath = process.cwd().replace(/\\/g, "/");
var isExtensionEnv = fs.existsSync(process.cwd() + "/node_modules/@omnia/tooling/package.json");
if (fs.existsSync(process.cwd() + "/node_modules/gulp/package.json")) {
var gulp = require('gulp');
gulp.task('omnia-before-build', function (cb) {
runBeforeBuild(cb);
});
gulp.task('omnia-after-build', function (cb) {
runAfterBuild(cb);
});
}
function runBeforeBuild(cb) {
var _beforeBuildTasks = core.getRegisteredBuildTasks().filter(function (task) { return task.stage === core.BuildStage.BeforeBuild; }).sort(sortBuildTask) || [];
executeTasks(_beforeBuildTasks, cb, handleException);
}
function runAfterBuild(cb) {
var _afterBuildTasks = core.getRegisteredBuildTasks().filter(function (task) { return task.stage === core.BuildStage.AfterBuild; }).sort(sortBuildTask) || [];
executeTasks(_afterBuildTasks, cb, handleException);
}
function loadTasks() {
var scanTasks = [];
if (!isExtensionEnv) {
utils.getDirectories("client/tooling").forEach(function (name) {
scanTasks.push("client/tooling/" + name + "/task");
});
}
else {
var omniaPackages = utils.getDirectories("node_modules/@omnia");
if (omniaPackages) {
omniaPackages.forEach(function (name) {
scanTasks.push("node_modules/@omnia/" + name + "/task");
});
}
}
//var files = globby.sync(scanTasks)
//var directories = [];
for (var i = 0; i < scanTasks.length; i++) {
if (fs.existsSync(utils.root(scanTasks[i] + ".js")) || fs.existsSync(utils.root(scanTasks[i] + ".ts"))) {
var task = require(processPath + '/' + scanTasks[i]);
if (task.init)
task.init();
}
}
}
function executeTasks(tasks, resolve, reject) {
if (tasks.length === 0) {
if (resolve)
resolve();
}
else {
tasks.shift()
.task()
.then(function () { executeTasks(tasks, resolve, reject); }, reject)
.catch(function (error) {
if (reject)
reject(error);
});
}
}
function sortBuildTask(task1, task2) {
return task1.order - task2.order;
}
function init() {
loadTasks();
}
exports.init = init;
function handleException(err) {
console.log(err);
throw new Error("Exit, have an exception.");
}
//function chainError(err) {
// return Promise.reject(err)
//}
process.argv.forEach(function (val, index) {
if (val === "--run") {
if (process.argv.length >= index + 1) {
if (process.argv[index + 1].toLowerCase() === "omnia-before-build") {
if (fs.existsSync(process.cwd() + "/node_modules/ts-node/package.json")) {
// trigger ts
require("ts-node").register({
transpileOnly: true,
typeCheck: false,
files: false
});
}
init();
runBeforeBuild();
}
if (process.argv[index + 1].toLowerCase() === "omnia-after-build") {
if (fs.existsSync(process.cwd() + "/node_modules/ts-node/package.json")) {
// trigger ts
require("ts-node").register({
transpileOnly: true,
typeCheck: false,
files: false
});
}
init();
runAfterBuild();
}
}
}
});