@tsdi/pack
Version:
@tsdi/pack is simple build tasks, base on AOP, Ioc container, via @tsdi. dev build pack activities.
270 lines (268 loc) • 8.6 kB
JavaScript
import { __awaiter, __decorate, __metadata } from "tslib";
import { Injectable, isArray, isString, isFunction } from '@tsdi/ioc';
import { toAbsolutePath, syncRequire } from '@tsdi/platform-server';
import { existsSync, readdirSync, lstatSync } from 'fs';
import { join, dirname, normalize, relative, basename, extname } from 'path';
import { mkdir, cp, rm
/* ls, test, cd, ShellString, pwd, ShellArray, find, mv, TestOptions, cat, sed */
} from 'shelljs';
import { PlatformServiceToken } from './IPlatformService';
import globby from 'globby';
import { NodeActivityContext } from './NodeActivityContext';
const minimist = require('minimist');
const del = require('del');
const relChkExp = /^(.{1,2}\/?\\?)?$/;
const notExp = /^!/;
const replNodeMdlExp = /(node_modules)[\\\/]/g;
let PlatformService = class PlatformService {
constructor(ctx) {
this.ctx = ctx;
this.packageFile = 'package.json';
}
/**
* get evn args.
*
* @returns {ObjectMap}
* @memberof NodeContext
*/
getEnvArgs() {
if (!this.envArgs) {
this.envArgs = minimist([...this.ctx.workflow.args, ...process.argv.slice(2)]);
}
return this.envArgs;
}
hasArg(arg) {
return process.argv.indexOf(arg) > -1 || process.argv.indexOf('--' + arg) > -1;
}
/**
* get root folders.
*
* @param {Express2<string, string, boolean>} [express]
* @returns {string[]}
* @memberof NodeContext
*/
getRootFolders(express) {
return this.getFolders(this.getRootPath(), express);
}
getCompilerOptions(tsconfig) {
let filename = this.toRootPath(tsconfig);
let cfg = syncRequire(filename) || {};
return cfg.compilerOptions || {};
}
getFileName(pathName) {
return basename(pathName).replace(extname(pathName), '');
}
/**
* get folders of path.
*
* @param {string} pathstr
* @param {Express2<string, string, boolean>} [express]
* @returns {string[]}
* @memberof NodeContext
*/
getFolders(pathstr, express) {
pathstr = normalize(pathstr);
let dir = readdirSync(pathstr);
let folders = [];
dir.forEach(d => {
let sf = join(pathstr, d);
let f = lstatSync(sf);
if (f.isDirectory()) {
if (express) {
let fl = express(sf, d);
if (fl) {
folders.push(fl);
}
}
else {
folders.push(sf);
}
}
});
return folders;
}
getFiles(express, options, filter, mapping) {
return __awaiter(this, void 0, void 0, function* () {
if (!(isString(express) || isArray(express))) {
throw Error('input express param type error!');
}
if (isFunction(options)) {
filter = options;
mapping = filter;
options = {};
}
let filePaths = (yield globby(this.normalizeSrc(express), options)).map(e => isString(e) ? e : e.path);
if (filter) {
filePaths = filePaths.filter(filter);
}
if (mapping) {
return filePaths.map(mapping);
}
return filePaths;
});
}
join(...paths) {
return join(...paths);
}
normalize(url) {
return url ? url.split('\\').join('/') : url;
}
normalizeSrc(src) {
if (isString(src)) {
return this.normalize(src);
}
else {
return src.map(s => this.normalize(s));
}
}
copyFile(src, dist, options) {
if (options && options.force) {
rm('-f', dist);
cp(src, dist);
}
else {
cp(src, dist);
}
}
existsFile(filename) {
return existsSync(this.toRootPath(filename));
}
copyDir(src, dist, options) {
if (!existsSync(dist)) {
mkdir('-p', dist);
}
if (options && options.force) {
rm('-rf', normalize(join(dist, '/')));
mkdir('-p', normalize(join(dist, '/')));
cp('-R', normalize(src + '/*'), normalize(join(dist, '/')));
}
else {
cp('-R', normalize(src + '/*'), normalize(join(dist, '/')));
}
}
copyTo(filePath, dist) {
return __awaiter(this, void 0, void 0, function* () {
const outFile = join(dist, filePath.replace(replNodeMdlExp, ''));
return new Promise((res) => {
if (!existsSync(outFile)) {
if (!existsSync(dirname(outFile))) {
mkdir('-p', dirname(outFile));
}
cp('-R', join(filePath), outFile);
res(true);
}
});
});
}
del(src, opts) {
return del(this.normalizeSrc(src), opts);
}
/**
* to root path.
*
* @param {string} pathstr
* @returns {string}
* @memberof NodeContext
*/
toRootPath(pathstr) {
let root = this.getRootPath();
return root ? toAbsolutePath(root, pathstr) : this.normalize(pathstr);
}
/**
* convert path to relative root path.
*
* @param {string} pathstr
* @returns {string}
* @memberof NodeActivityContext
*/
relativeRoot(pathstr) {
if (relChkExp.test(pathstr)) {
return pathstr;
}
let fullpath = this.toRootPath(pathstr);
return relative(this.getRootPath(), fullpath) || '.';
}
getRootPath() {
return this.ctx.baseURL;
}
toRootSrc(src) {
let root = this.getRootPath();
if (root) {
if (isString(src)) {
return this.prefixSrc(root, src);
}
else {
return src.map(s => this.prefixSrc(root, s));
}
}
return src;
}
relativePath(path1, path2) {
return relative(path1, path2);
}
prefixSrc(root, strSrc) {
let prefix = '';
if (notExp.test(strSrc)) {
prefix = '!';
strSrc = strSrc.substring(1, strSrc.length);
}
return prefix + toAbsolutePath(root, strSrc);
}
/**
* get package.
*
* @returns {*}
* @memberof NodeContext
*/
getPackage() {
if (!this._package) {
let filename = this.toRootPath(this.packageFile);
this._package = syncRequire(filename);
}
return this._package;
}
/**
* get package version.
*
* @returns {string}
* @memberof NodeContext
*/
getPackageVersion() {
let packageCfg = this.getPackage();
if (!packageCfg) {
return '';
}
return packageCfg.version || '';
}
/**
* get module version.
*
* @param {string} name
* @param {boolean} [dependencies=false]
* @returns {string}
* @memberof NodeContext
*/
getModuleVersion(name, dependencies = false) {
let packageCfg = this.getPackage();
if (!packageCfg) {
return '';
}
let version = '';
if (packageCfg.dependencies) {
version = packageCfg.dependencies[name];
}
if (!dependencies && !version && packageCfg.devDependencies) {
version = packageCfg.devDependencies[name];
}
return version || '';
}
static ρAnn() {
return { "name": "PlatformService", "params": { "constructor": ["ctx"], "hasArg": ["arg"], "getRootFolders": ["express"], "getCompilerOptions": ["tsconfig"], "getFileName": ["pathName"], "getFolders": ["pathstr", "express"], "getFiles": ["express", "options", "filter", "mapping"], "join": ["paths"], "normalize": ["url"], "normalizeSrc": ["src"], "copyFile": ["src", "dist", "options"], "existsFile": ["filename"], "copyDir": ["src", "dist", "options"], "copyTo": ["filePath", "dist"], "del": ["src", "opts"], "toRootPath": ["pathstr"], "relativeRoot": ["pathstr"], "toRootSrc": ["src"], "relativePath": ["path1", "path2"], "prefixSrc": ["root", "strSrc"], "getModuleVersion": ["name", "dependencies"] } };
}
};
PlatformService = __decorate([
Injectable(PlatformServiceToken),
__metadata("design:paramtypes", [NodeActivityContext])
], PlatformService);
export { PlatformService };
//# sourceMappingURL=sourcemaps/PlatformService.js.map