UNPKG

youzanyun-devtool-worker

Version:

145 lines (144 loc) 6.62 kB
"use strict"; 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 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/dist`); const hasBuilded = await this.h5ExtensionService.checkDistDir(extensionDir); if (!hasBuilded) { throw new Error('请确认代码已打包'); } try { const userInfo = await this.userService.getUserInfo(); const pageUrlInfo = await this.uploadH5CompsInfo(project, userInfo); const localImpls = await this.h5ExtensionImplService.getLocalPageImplsByProjectId(projectId); const originalFrontendImpls = await this.customApiService.findByAppName(projectId); const newImpls = []; for (let impl of originalFrontendImpls) { const localItem = localImpls.find((item) => item.uuid === impl.uuid); 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; } 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([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "projectService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "customApiService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "cdnService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "userService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "executeService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "h5ExtensionImplService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], H5ExtensionUploadService.prototype, "h5ExtensionService", void 0); H5ExtensionUploadService = tslib_1.__decorate([ (0, spring4js_nodejs_1.Service)() ], H5ExtensionUploadService); exports.default = H5ExtensionUploadService; ;