youzanyun-devtool-worker
Version:
- web - ws - proxy
147 lines (146 loc) • 6.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const path_1 = tslib_1.__importDefault(require("path"));
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const get_1 = tslib_1.__importDefault(require("lodash/get"));
const spring4js_nodejs_1 = require("spring4js-nodejs");
let H5ExtensionUploadService = class H5ExtensionUploadService {
constructor() {
}
async start() {
}
async uploadInfo(projectId) {
const project = await this.projectService.getProjectById(projectId);
const isClean = await this.projectService.checkProjectStatus(project.proPath);
if (!isClean) {
throw new Error('请先提交本地代码');
}
const extensionDir = path_1.default.resolve(project.proPath, `${project.proName}-ui/h5-extension`);
try {
const statusInfo = await this.executeService.promiseExec('npm run build', {
cwd: extensionDir
});
}
catch (err) { }
try {
const userInfo = await this.userService.getUserInfo();
const pageUrlInfo = await this.uploadH5CompsInfo(project, userInfo);
const localImpls = await this.h5ExtensionImplService.getLocalPageImplsByProjectId(projectId);
const originalRuleConfig = await this.customApiService.getExtImplAndRule(projectId);
const originalFrontendImpls = get_1.default(originalRuleConfig, 'data.implPageRuleRespList', []);
const newImpls = [];
for (let impl of originalFrontendImpls) {
const localItem = localImpls.find((item) => item.uuid === impl.extensionPointImplUUID);
if (localItem) {
const pageName = localItem.pageName;
const pageUrlItem = pageUrlInfo.find((item) => item.pageName === pageName);
const newImplItem = Object.assign({}, localItem);
if (localItem.content) {
try {
const content = JSON.parse(localItem.content);
if (content.length) {
if (!content[0].script) {
content[0].script = {
type: 'h5',
appName: project.proName,
commitUser: userInfo.userName || userInfo.mobile || 'youzanyun-developer-tool',
commitHash: 'unknown',
};
}
content[0].script.url = pageUrlItem.url;
content[0].script.components = pageUrlItem.components;
if (localItem.contentDesc) {
content[0].script.contentDesc = JSON.parse(localItem.contentDesc);
}
}
newImplItem.content = JSON.stringify(content) || '';
}
catch (err) {
}
}
newImpls.push(newImplItem);
}
}
if (!newImpls.length) {
return true;
}
console.log('newImpls', newImpls);
const updateResult = await this.h5ExtensionImplService.batchUpdateImplPage({
projectName: project.proName,
details: newImpls,
});
if (!updateResult) {
throw new Error('更新实现失败');
}
const clearResult = await this.h5ExtensionImplService.clearPageImplByProjectId(projectId);
return clearResult;
}
catch (error) {
throw new Error(error.message || '上传失败');
}
}
async uploadH5CompsInfo(project, userInfo) {
const prodBuildDir = path_1.default.resolve(project.proPath, `${project.proName}-ui/h5-extension/dist`);
const builds = await fs_extra_1.default.readdir(prodBuildDir);
const buildFileNameList = builds.filter(item => {
return item !== 'info.json' && !item.endsWith('.map');
});
const fileList = buildFileNameList.map(fileShorr => {
return path_1.default.resolve(prodBuildDir, fileShorr);
});
const pageNames = buildFileNameList.map(fileShorr => {
return fileShorr.split('.')[0];
});
const uploadCompFileList = await this.cdnService.uploadFileToCdn({
projectName: project.proName,
pageName: 'h5-comps',
fileList,
addHash: false,
});
const uploadUrls = uploadCompFileList.map(item => item.url);
const infoPath = path_1.default.resolve(project.proPath, `${project.proName}-ui/h5-extension/dist/info.json`);
const pages = await this.getInfo(uploadUrls, infoPath, pageNames);
const customInfo = {
type: 'h5',
appName: project.proName,
commitUser: userInfo.userName || userInfo.mobile || 'youzanyun-developer-tool',
commitHash: 'unknown',
pages,
};
const saveRes = await this.customApiService.saveCustomContent(customInfo);
return pages;
}
async getInfo(urls, infoPath, fileNameList) {
const pagesInfo = await fs_extra_1.default.readJSON(infoPath);
const result = [];
fileNameList.map((pageName, i) => {
result.push(Object.assign({ pageName, url: urls[i], methods: [], components: [] }, pagesInfo[pageName]));
});
return result;
}
;
};
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "projectService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "customApiService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "cdnService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "userService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "executeService", void 0);
tslib_1.__decorate([
spring4js_nodejs_1.Resource()
], H5ExtensionUploadService.prototype, "h5ExtensionImplService", void 0);
H5ExtensionUploadService = tslib_1.__decorate([
spring4js_nodejs_1.Service()
], H5ExtensionUploadService);
exports.default = H5ExtensionUploadService;
;