UNPKG

@omnia/tooling

Version:

Provide basic stuffs extensible for omnia extension.

192 lines (190 loc) • 6.64 kB
#!/usr/bin/env node 'use strict'; 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}`); } }