youzanyun-devtool-worker
Version:
180 lines (179 loc) • 7.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const spring4js_nodejs_1 = require("spring4js-nodejs");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const path_1 = tslib_1.__importDefault(require("path"));
const moment_1 = tslib_1.__importDefault(require("moment"));
const download_1 = tslib_1.__importDefault(require("download"));
const tunnel_1 = tslib_1.__importDefault(require("tunnel"));
let MpRemoteDebugService = class MpRemoteDebugService {
constructor() {
}
async start() {
console.log('start');
}
async requestBuild(projectId) {
const { proName } = await this.projectService.getProjectById(projectId);
const config = await this.getMpConfig(projectId);
const releaseId = `devTool${(0, moment_1.default)().format('YYYYMMDDHHmmss')}${Math.floor(Math.random() * 999)}`;
const params = Object.assign({ diyAppName: proName, releaseId }, config);
const result = await this.requestService.get('https://baymax.qima-inc.com/api/mp-manage/devtool/request-build', {
params
});
return releaseId;
}
async getBuildTaskByReleaseId(releaseId) {
const result = await this.requestService.get('https://baymax.qima-inc.com/api/mp-manage/devtool/build-detail', {
params: {
releaseId
}
});
return result.data;
}
async getBuildTaskList(buildTaskQueryDTO) {
const { projectId } = buildTaskQueryDTO;
const { proName } = await this.projectService.getProjectById(projectId);
const result = await this.requestService.get('https://baymax.qima-inc.com/api/mp-manage/devtool/build-list', {
params: Object.assign({ appName: proName }, buildTaskQueryDTO)
});
return result.data;
}
async getLog(releaseId, type) {
const result = await this.requestService.get('https://baymax.qima-inc.com/api/mp-manage/devtool/download', {
params: {
releaseId, type
}
});
return result;
}
async downloadAndDebug(releaseId) {
let dataDir = this.configService.getYouzanyunWokrspace();
let dir = path_1.default.resolve(dataDir, 'mp-remote-debug');
const autoStartWxDevTool = this.configService.getConfig('autoStartWxDevTool');
const wxDevToolPath = this.configService.getConfig('wxDevToolPath');
if (autoStartWxDevTool && wxDevToolPath) {
console.log('close');
try {
await this.executeService.promiseExecFile(wxDevToolPath, ['close', '--project', dir]);
}
catch (e) {
console.error('......', e);
}
console.log('close down');
}
await fs_extra_1.default.remove(dir);
const url = `https://baymax.qima-inc.com/api/mp-manage/devtool/download?releaseId=${releaseId}&type=artifact`;
let useProxy = this.configService.isUseProxy();
const options = {
extract: true,
strip: 1,
};
if (useProxy) {
let host = this.configService.getProxyHost();
let port = this.configService.getProxyPort();
options.agent = {
https: tunnel_1.default.httpsOverHttp({
proxy: {
host,
port
},
rejectUnauthorized: false,
})
};
}
;
await (0, download_1.default)(url, dir, options);
const extJsonPath = path_1.default.resolve(dir, 'ext.json');
const extJson = await fs_extra_1.default.readJSON(extJsonPath);
delete extJson.plugins;
await fs_extra_1.default.writeJSON(extJsonPath, extJson);
await this.removeComponentInPage(dir, [
{
jsonFile: 'packages/goods/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/home/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/levelcenter/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/salesman/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/shop/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/short-video/single-video/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/ump/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
{
jsonFile: 'packages/usercenter/components/showcase/video-plugin/index.json',
componentName: 'plugin-video'
},
]);
if (autoStartWxDevTool && wxDevToolPath) {
console.log('preview');
try {
await this.executeService.promiseExecFile(wxDevToolPath, ['open', '--project', dir]);
}
catch (e) {
console.error('++++++', e);
}
console.log('preview down');
}
return dir;
}
async removeComponentInPage(dir, taskList) {
for (let task of taskList) {
const jsonPath = path_1.default.resolve(dir, task.jsonFile);
const json = await fs_extra_1.default.readJSON(jsonPath);
const components = json.usingComponents;
delete components[task.componentName];
await fs_extra_1.default.writeJSON(jsonPath, json);
}
}
async getMpConfig(projectId) {
let dataDir = this.configService.getDataDir();
const { proName } = await this.projectService.getProjectById(projectId);
let mpConfigFIle = path_1.default.resolve(dataDir, `mp-remote-debug-config.${proName}.json`);
let exists = await fs_extra_1.default.pathExists(mpConfigFIle);
if (exists) {
const config = await fs_extra_1.default.readJson(mpConfigFIle);
return config;
}
return {};
}
async saveMpConfig(projectId, config) {
let dataDir = this.configService.getDataDir();
const { proName } = await this.projectService.getProjectById(projectId);
let mpConfigFile = path_1.default.resolve(dataDir, `mp-remote-debug-config.${proName}.json`);
await fs_extra_1.default.writeJson(mpConfigFile, config, { spaces: 2 });
}
};
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], MpRemoteDebugService.prototype, "configService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], MpRemoteDebugService.prototype, "projectService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], MpRemoteDebugService.prototype, "requestService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], MpRemoteDebugService.prototype, "executeService", void 0);
MpRemoteDebugService = tslib_1.__decorate([
(0, spring4js_nodejs_1.Service)()
], MpRemoteDebugService);
exports.default = MpRemoteDebugService;