UNPKG

@omnia/tooling

Version:

Provide basic stuffs extensible for omnia extension.

111 lines (110 loc) 3.95 kB
#!/usr/bin/env node 'use strict'; 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(); } } } });