@omnia/tooling
Version:
Provide basic stuffs extensible for omnia extension.
206 lines (205 loc) • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWebpackResolveAlias = exports.getWebpackResolveModules = exports.getTSConfig = exports.loadFile = exports.registerCleanTask = exports.getRegisteredBuildTasks = exports.registerBuildTask = exports.getCleanTasks = exports.getRegisteredServeTasks = exports.registerServeTask = exports.getEnviromentInfo = exports.getExtensionInfo = exports.getConfig = exports.registerTsNode = exports.registerTSConfig = exports.ResolvablePromise = exports.TaskStage = void 0;
const tslib_1 = require("tslib");
var fs = require('fs'), path = require('path');
const utils = tslib_1.__importStar(require("./utils"));
var TaskStage;
(function (TaskStage) {
TaskStage["Clean"] = "Clean";
TaskStage["Build"] = "Build";
TaskStage["BeforeCreateServer"] = "BeforeCreateServer";
TaskStage["CreateServer"] = "CreateServer";
TaskStage["AfterCreateServer"] = "AfterCreateServer";
TaskStage["BeforeScanManifests"] = "BeforeScanManifests";
TaskStage["AfterScanManifests"] = "AfterScanManifests";
TaskStage["BeforeBundleManifest"] = "BeforeBundleManifest";
TaskStage["BundleManifest"] = "BundleManifest";
TaskStage["AfterBundleManifest"] = "AfterBundleManifest";
TaskStage["BeforeGenerateManifestsMetadata"] = "BeforeGenerateManifestsMetadata";
TaskStage["GenerateManifestsMetadata"] = "GenerateManifestsMetadata";
TaskStage["AfterGenerateManifestsMetadata"] = "AfterGenerateManifestsMetadata";
})(TaskStage = exports.TaskStage || (exports.TaskStage = {}));
;
var _registeredServeTasks = [];
var _registeredBuildTasks = [];
var _registeredCleanTasks = [];
var _tsconfig = null;
var _webpackResolveModules = null;
var _webpackResolveAlias = null;
function registerServeTask(serveTask) {
_registeredServeTasks.push(serveTask);
}
exports.registerServeTask = registerServeTask;
function getRegisteredServeTasks() {
return _registeredServeTasks;
}
exports.getRegisteredServeTasks = getRegisteredServeTasks;
function registerCleanTask(cleanTask) {
_registeredCleanTasks.push(cleanTask);
}
exports.registerCleanTask = registerCleanTask;
function getCleanTasks() {
return _registeredCleanTasks;
}
exports.getCleanTasks = getCleanTasks;
/**
* buildTask: {type: BeforeBuild|AfterBuild, order:number(default 100 for extension), task: () -> promise }
*/
function registerBuildTask(buildTask) {
_registeredBuildTasks.push(buildTask);
}
exports.registerBuildTask = registerBuildTask;
function getRegisteredBuildTasks() {
return _registeredBuildTasks;
}
exports.getRegisteredBuildTasks = getRegisteredBuildTasks;
function getExtensionInfo() {
var result = {};
var filePath = utils.root('extension.json');
if (fs.existsSync(filePath)) {
try {
result = require(filePath);
}
catch (err) {
console.log(err);
}
}
return result;
}
exports.getExtensionInfo = getExtensionInfo;
function getTSConfig() {
if (_tsconfig === null) {
let filePath = utils.root('tsconfig.json');
if (fs.existsSync(filePath)) {
try {
_tsconfig = require(filePath);
}
catch (err) {
console.log(err);
}
}
}
return _tsconfig;
}
exports.getTSConfig = getTSConfig;
function getWebpackResolveModules() {
if (_webpackResolveModules === null) {
_webpackResolveModules = ['node_modules'];
let tsconfigInfo = getTSConfig();
if (tsconfigInfo && tsconfigInfo.compilerOptions && tsconfigInfo.compilerOptions.baseUrl) {
_webpackResolveModules = [tsconfigInfo.compilerOptions.baseUrl, 'node_modules'];
}
}
return _webpackResolveModules;
}
exports.getWebpackResolveModules = getWebpackResolveModules;
function getWebpackResolveAlias() {
if (_webpackResolveAlias === null) {
_webpackResolveAlias = {};
let tsconfigInfo = getTSConfig();
if (tsconfigInfo && tsconfigInfo.compilerOptions && tsconfigInfo.compilerOptions.baseUrl && tsconfigInfo.compilerOptions.paths) {
Object.keys(tsconfigInfo.compilerOptions.paths).forEach(path => {
if (path === "*") {
throw new Error(`Error, tsconfig.json -> tooling not support config path format '*': ${path} : ${tsconfigInfo.compilerOptions.paths[path]}`);
}
if (tsconfigInfo.compilerOptions.paths[path].length > 1) {
throw new Error(`Error, tsconfig.json -> tooling not support multiple paths in array: ${path} : ${tsconfigInfo.compilerOptions.paths[path]}`);
}
let alias = path.indexOf("/*") > -1 ? path.replace("/*", "") : path + "$";
_webpackResolveAlias[alias] = utils.root(`${tsconfigInfo.compilerOptions.baseUrl}/${tsconfigInfo.compilerOptions.paths[path][0].replace("/*", "").replace("*", "")}`);
});
}
}
return _webpackResolveAlias;
}
exports.getWebpackResolveAlias = getWebpackResolveAlias;
function getEnviromentInfo() {
var result = {};
var filePath = utils.root('environment.json');
if (fs.existsSync(filePath)) {
try {
result = require(filePath);
}
catch (err) {
console.log(err);
}
}
return result;
}
exports.getEnviromentInfo = getEnviromentInfo;
function getConfig(path) {
var filePath = (process.cwd().replace(/\\/g, "/") + "/" + path).replace(/\/\//g, "/");
if (fs.existsSync(filePath)) {
try {
return require(filePath);
}
catch (err) {
console.log('have an exception when load ' + filePath + ' : ' + err);
}
}
return null;
}
exports.getConfig = getConfig;
function loadFile(path) {
var filePath = (process.cwd() + "/" + path).replace(/\\/g, "/").replace(/\/\//g, "/");
if (fs.existsSync(filePath)) {
try {
return require(filePath);
}
catch (err) {
console.log('have an exception when load ' + filePath + ' : ' + err);
}
}
return null;
}
exports.loadFile = loadFile;
function registerTsNode() {
registerTSConfig();
//const { register } = require('esbuild-register/dist/node')
//const { unregister } = register({
//})
// trigger ts
//require("ts-node").register({
// transpileOnly: true,
// typeCheck: false,
// files: false
//});
}
exports.registerTsNode = registerTsNode;
function registerTSConfig() {
let tsConfigOptions = getTSConfig();
if (tsConfigOptions && tsConfigOptions.compilerOptions && tsConfigOptions.compilerOptions.baseUrl) {
require("tsconfig-paths").register({
baseUrl: tsConfigOptions.compilerOptions.baseUrl,
paths: tsConfigOptions.compilerOptions.paths || {}
});
}
}
exports.registerTSConfig = registerTSConfig;
class ResolvablePromise {
constructor() {
this._resolved = false;
this._rejected = false;
this.resolving = false;
this.promise = new Promise((resolve, reject) => {
this.resolve = (value) => {
this.resolving = false;
this._resolved = true;
resolve(value);
};
this.reject = (reason) => {
this.resolving = false;
this._rejected = true;
reject(reason);
};
});
}
get resolved() {
return this._resolved;
}
get rejected() {
return this._rejected;
}
}
exports.ResolvablePromise = ResolvablePromise;