UNPKG

@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
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