youzanyun-devtool-worker
Version:
145 lines (144 loc) • 6.62 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 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;
;