@omnia/tooling
Version:
Provide basic stuffs extensible for omnia extension.
192 lines (190 loc) • 6.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerEsbuild = exports.run = exports.serve = exports.clean = exports.build = exports.utils = exports.core = void 0;
const tslib_1 = require("tslib");
const figlet_1 = tslib_1.__importDefault(require("figlet"));
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const minimist_1 = tslib_1.__importDefault(require("minimist"));
const core = tslib_1.__importStar(require("./core"));
exports.core = core;
const utils = tslib_1.__importStar(require("./utils"));
exports.utils = utils;
tslib_1.__exportStar(require("./core"), exports);
tslib_1.__exportStar(require("./utils"), exports);
const TYPESCRIPT_VERSION = '4.9.4';
const argv = (0, minimist_1.default)(process.argv.slice(2));
const command = argv._[0];
const path = require('path'), semver = require("semver"), fs = require('fs'), processPath = process.cwd().replace(/\\/g, "/"), nodeSupportedVersion = '>=12.18.4';
var isExtensionEnv = fs.existsSync(process.cwd() + "/node_modules/@omnia/tooling/package.json");
function validateNodeSupportVersion() {
if (!semver.satisfies(process.version, nodeSupportedVersion)) {
throw new Error(`Your dev environment is running NodeJS version ${process.version} which does`
+ ' not meet the requirements for running this tool. This tool requires a version of NodeJS'
+ ` that matches ${nodeSupportedVersion}`);
}
}
function triggerClean(cb) {
validateNodeSupportVersion();
var tasks = core.getCleanTasks() || [];
executeTasks(tasks, cb, handleException);
}
function triggerServe(cb) {
validateNodeSupportVersion();
var tasks = core.getRegisteredServeTasks().filter(function (task) { return task.stage === core.TaskStage.BeforeCreateServer; }).sort(sortTask) || [];
executeTasks(tasks, cb, handleException);
}
function triggerBuild(cb) {
validateNodeSupportVersion();
var tasks = core.getRegisteredBuildTasks().filter(function (task) { return task.stage === core.TaskStage.Build; }).sort(sortTask) || [];
executeTasks(tasks, cb, handleException);
}
function loadTasks() {
var scanTasks = [];
if (!isExtensionEnv) {
utils.getDirectories(path.resolve(__dirname, "..")).forEach(name => {
scanTasks.push(path.resolve(__dirname, "..") + "/" + name + "/task");
});
}
else {
let omniaPackages = utils.getDirectories("node_modules/@omnia");
if (omniaPackages) {
omniaPackages.forEach(name => {
scanTasks.push(processPath + "/node_modules/@omnia/" + name + "/task");
});
}
}
for (var i = 0; i < scanTasks.length; i++) {
if (fs.existsSync(scanTasks[i] + ".js") || fs.existsSync(scanTasks[i] + ".ts")) {
let task = require(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((error) => {
if (reject)
reject(error);
});
}
}
function sortTask(task1, task2) {
return task1.order - task2.order;
}
function initTasks() {
core.registerTSConfig();
loadTasks();
}
function build(cb) {
printLogo();
if (isExtensionEnv) {
console.log(chalk_1.default.cyan(`Version ${require('@omnia/tooling/package.json').version}`));
}
initTasks();
triggerBuild(cb);
}
exports.build = build;
function clean(greeting = true) {
return new Promise((resolve, reject) => {
if (greeting) {
printLogo();
if (isExtensionEnv) {
console.log(chalk_1.default.cyan(`Version ${require('@omnia/tooling/package.json').version}`));
}
}
utils.log('Cleaning...');
initTasks();
triggerClean(() => {
utils.log('Done clean.');
resolve();
});
});
}
exports.clean = clean;
function serve() {
printLogo();
if (isExtensionEnv) {
console.log(chalk_1.default.cyan(`Version ${require('@omnia/tooling/package.json').version}`));
}
utils.log('Creating hosting...');
initTasks();
triggerServe();
}
exports.serve = serve;
function handleException(err) {
console.log(err);
throw new Error("Exit, have an exception.");
}
function printLogo() {
console.log(chalk_1.default.greenBright(figlet_1.default.textSync(`
Omnia Fx
Build System
`, {
font: 'Small',
horizontalLayout: 'default',
verticalLayout: 'default',
width: 80,
whitespaceBreak: true
})));
}
function help() {
printLogo();
if (isExtensionEnv) {
console.log(chalk_1.default.cyan(`Version ${require('@omnia/tooling/package.json').version}`));
}
console.log(chalk_1.default.cyan(`
Usage: omniafx [command] [args] [--options]
Commands:
omniafx build [root=cwd] Build target directory.
omniafx serve [root=cwd] Start Serving target directory.
omniafx clean Clear cache.
Options:
--help, -h [boolean] show help
--version, -v [boolean] show version
`));
}
/********************* Execute ***********************/
async function run() {
validate();
if (command === "build" || argv.build) {
if (process.argv.length > 0 && process.argv.find(argv => argv === "--clean") !== undefined) {
await clean(false);
}
build();
}
else if (command === "serve" || argv.serve) {
if (process.argv.length > 0 && process.argv.find(argv => argv === "--clean") !== undefined) {
await clean(false);
}
serve();
}
else if (command === "clean" || argv.clean) {
clean();
}
else if (argv.help || argv.h) {
help();
}
else if (argv.version || argv.v) {
console.log(chalk_1.default.cyan(`omniafx v${require('@omnia/tooling/package.json').version}`));
}
}
exports.run = run;
function registerEsbuild(options = null) {
return require('./esbuild-register.custom').register(options || {});
}
exports.registerEsbuild = registerEsbuild;
function validate() {
let tsVersion = require('typescript/package.json').version;
if (tsVersion !== TYPESCRIPT_VERSION) {
throw new Error(`Invalid typescript version ${tsVersion} from local node_modules/typescript, expect valid version ${TYPESCRIPT_VERSION}`);
}
}