youzanyun-devtool-worker
Version:
274 lines (273 loc) • 15.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const download_1 = tslib_1.__importDefault(require("download"));
const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
const path_1 = tslib_1.__importDefault(require("path"));
const nunjucks_1 = tslib_1.__importDefault(require("nunjucks"));
const merge_1 = tslib_1.__importDefault(require("lodash/merge"));
const spring4js_nodejs_1 = require("spring4js-nodejs");
let CustomCompsService = class CustomCompsService {
async start() {
this.cacheDir = this.configService.getDpCacheDir();
this.tplPath = path_1.default.resolve(this.cacheDir, 'design-platform-tpl');
this.tplVersionFileName = 'ecloud-tpl-version.json';
await fs_extra_1.default.ensureDir(this.tplPath);
}
async createDevelopProject({ appId, designAppId }) {
const projectInfo = await this.projectService.getProjectById(appId);
const latestVersion = await this._checkAndDownloadTpl(designAppId, projectInfo);
let appVersionPath = path_1.default.resolve(projectInfo.proPath, this.tplVersionFileName);
let isAppVersionExist = await fs_extra_1.default.pathExists(appVersionPath);
if (!isAppVersionExist) {
await fs_extra_1.default.copy(this.tplPath, projectInfo.proPath);
return {
latestVersion,
currentVersion: latestVersion
};
}
else {
const currentVersionInfo = await fs_extra_1.default.readJSON(appVersionPath);
if (currentVersionInfo.designPlatformFrameworkVersion === '0.0.0') {
await fs_extra_1.default.copy(this.tplPath, projectInfo.proPath);
return {
latestVersion,
currentVersion: latestVersion
};
}
return {
latestVersion,
currentVersion: currentVersionInfo.designPlatformFrameworkVersion
};
}
}
async _checkAndDownloadTpl(designAppId, projectInfo) {
let remoteToolConfig = {};
try {
remoteToolConfig = await this.customApiService.getRemoteToolConfig();
}
catch (err) {
throw new Error('初始化工程失败');
}
const remoteVersionInfo = JSON.parse(remoteToolConfig.templateVersion || '{}');
let needDownload = false;
let cacheVersionInfo = {};
let needDownloadMp = false;
const dpMpPath = path_1.default.resolve(projectInfo.proPath, 'showcase-components-mp');
try {
const whiteList = await this.customApiService.getBrandIsvAppIdWhiteList();
const exists = fs_extra_1.default.pathExistsSync(dpMpPath);
if (whiteList.includes(designAppId) && !exists) {
needDownloadMp = true;
}
}
catch (error) {
throw new Error('初始化工程失败, 小程序目录初始化异常');
}
try {
cacheVersionInfo = await fs_extra_1.default.readJson(path_1.default.resolve(this.tplPath, this.tplVersionFileName));
if (remoteVersionInfo.designPlatformFrameworkVersion != cacheVersionInfo.designPlatformFrameworkVersion) {
needDownload = true;
}
}
catch (e) {
needDownload = true;
}
if (needDownloadMp) {
const mpTplPath = remoteVersionInfo.designPlatformMpTempUrl || "https://file.yzcdn.cn/upload_files/yz-file/2022/12/26/FjKS1dFElORzpByZ4LmZ09nRjOsJ.zip";
await (0, download_1.default)(mpTplPath, dpMpPath, {
extract: true,
strip: 1,
headers: {
accept: 'application/zip'
}
});
}
if (needDownload) {
await fs_extra_1.default.remove(this.tplPath);
await (0, download_1.default)(remoteVersionInfo.designPlatformUrl, this.tplPath, {
extract: true,
strip: 1,
headers: {
accept: 'application/zip'
}
});
fs_extra_1.default.ensureDir(path_1.default.resolve(this.tplPath, 'showcase-components/src'));
fs_extra_1.default.ensureDir(path_1.default.resolve(this.tplPath, 'showcase-editor/src/editors'));
}
return remoteVersionInfo.designPlatformFrameworkVersion;
}
async updateProject({ appId }) {
const projectInfo = await this.projectService.getProjectById(appId);
const latestVersion = await this._checkAndDownloadTpl(appId, projectInfo);
const projectRoot = projectInfo.proPath;
let appVersionPath = path_1.default.resolve(projectRoot, this.tplVersionFileName);
let isAppVersionExist = await fs_extra_1.default.pathExists(appVersionPath);
if (!isAppVersionExist) {
await fs_extra_1.default.copy(this.tplPath, projectRoot);
}
else {
await fs_extra_1.default.remove(path_1.default.resolve(projectRoot, 'ecloud-tpl-version.json'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'ecloud-tpl-version.json'), path_1.default.resolve(projectRoot, 'ecloud-tpl-version.json'));
const compDir = path_1.default.resolve(projectRoot, 'showcase-components');
await fs_extra_1.default.remove(path_1.default.resolve(projectRoot, 'showcase-components/webpack'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-components/webpack'), path_1.default.resolve(projectRoot, 'showcase-components/webpack'));
await fs_extra_1.default.ensureDir(path_1.default.resolve(projectRoot, 'showcase-components/src/common'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-components/src/common'), path_1.default.resolve(projectRoot, 'showcase-components/src/common'));
await fs_extra_1.default.remove(path_1.default.resolve(compDir, 'package-lock.json'));
await fs_extra_1.default.remove(path_1.default.resolve(compDir, 'yarn.lock'));
const compPckExist = await fs_extra_1.default.pathExists(path_1.default.resolve(compDir, 'package.json'));
if (compPckExist) {
const currentPackage = await fs_extra_1.default.readJSON(path_1.default.resolve(compDir, 'package.json'));
const demoPackage = await fs_extra_1.default.readJSON(path_1.default.resolve(this.tplPath, 'showcase-components/package.json'));
await fs_extra_1.default.writeJSON(path_1.default.resolve(compDir, 'package.json'), (0, merge_1.default)({}, currentPackage, demoPackage), { spaces: 2 });
}
else {
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-components/package.json'), path_1.default.resolve(compDir, 'package.json'));
}
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-components/README.md'), path_1.default.resolve(projectRoot, 'showcase-components/README.md'));
const editorDir = path_1.default.resolve(projectRoot, 'showcase-editor');
await fs_extra_1.default.remove(path_1.default.resolve(projectRoot, 'showcase-editor/webpack'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-editor/webpack'), path_1.default.resolve(projectRoot, 'showcase-editor/webpack'));
await fs_extra_1.default.ensureDir(path_1.default.resolve(projectRoot, 'showcase-editor/src/common'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-editor/src/common'), path_1.default.resolve(projectRoot, 'showcase-editor/src/common'));
await fs_extra_1.default.ensureDir(path_1.default.resolve(projectRoot, 'showcase-editor/src/utils'));
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-editor/src/utils'), path_1.default.resolve(projectRoot, 'showcase-editor/src/utils'));
await fs_extra_1.default.remove(path_1.default.resolve(editorDir, 'package-lock.json'));
await fs_extra_1.default.remove(path_1.default.resolve(editorDir, 'yarn.lock'));
const editorPckExist = await fs_extra_1.default.pathExists(path_1.default.resolve(editorDir, 'package.json'));
if (editorPckExist) {
const currentPackage = await fs_extra_1.default.readJSON(path_1.default.resolve(editorDir, 'package.json'));
const demoPackage = await fs_extra_1.default.readJSON(path_1.default.resolve(this.tplPath, 'showcase-editor/package.json'));
await fs_extra_1.default.writeJSON(path_1.default.resolve(editorDir, 'package.json'), (0, merge_1.default)({}, currentPackage, demoPackage), { spaces: 2 });
}
else {
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-editor/package.json'), path_1.default.resolve(editorDir, 'package.json'));
}
await fs_extra_1.default.copy(path_1.default.resolve(this.tplPath, 'showcase-editor/README.md'), path_1.default.resolve(projectRoot, 'showcase-editor/README.md'));
}
const currentVersionInfo = await fs_extra_1.default.readJSON(appVersionPath);
return {
latestVersion,
currentVersion: currentVersionInfo.designPlatformFrameworkVersion
};
}
async getCompsByAppName(params, isProd = false) {
const appList = await this.projectService.getProjectsByProName({
proName: params.appName,
});
const projectRoot = appList[0].proPath;
let editors = [];
let comps = [];
if (isProd) {
const editorFileList = await (0, fast_glob_1.default)(path_1.default.resolve(projectRoot, 'showcase-editor/dist/*.js'));
editors = editorFileList.map((editorFile) => /showcase-editor\/dist\/([\s\S]+).js/.exec(editorFile)[1]);
const compFileList = await (0, fast_glob_1.default)(path_1.default.resolve(projectRoot, 'showcase-components/dist/*.js'));
comps = compFileList.map((compFile) => /showcase-components\/dist\/([\s\S]+).js/.exec(compFile)[1]);
}
else {
const editorFileList = await (0, fast_glob_1.default)(path_1.default.resolve(projectRoot, 'showcase-editor/src/editors/*/index.js'));
editors = editorFileList.map((editorFile) => /showcase-editor\/src\/editors\/([\s\S]+)\/index.js/.exec(editorFile)[1]);
const compFileList = await (0, fast_glob_1.default)(path_1.default.resolve(projectRoot, 'showcase-components/src/*/App.vue'));
comps = compFileList.map((compFile) => /showcase-components\/src\/([\s\S]+)\/App.vue/.exec(compFile)[1]);
}
const result = await this.dpRequestService.getDpCompList(params, {
projectName: params.appName,
});
if (+result.code !== 0 && +result.code !== 200) {
return result;
}
const missingCompNames = [];
const componentList = result.data.componentList || [];
const finalCompList = componentList.filter((item) => {
const isExist = editors.indexOf(item.code) > -1 && comps.indexOf(item.code) > -1;
if (!isExist) {
missingCompNames.push(item.code);
}
return isExist;
});
return {
compList: finalCompList,
missingCompNames,
};
}
async saveComp(comp) {
const { proPath } = comp, otherParams = tslib_1.__rest(comp, ["proPath"]);
const result = await this.dpRequestService.saveDpComponent(otherParams, {
projectName: otherParams.appName,
});
if (+result.code !== 0 && +result.code !== 200) {
return result;
}
const compPath = path_1.default.resolve(proPath, `showcase-components/src/${comp.code}`);
const isCompExist = await fs_extra_1.default.pathExists(compPath);
if (!isCompExist) {
await fs_extra_1.default.ensureDir(compPath);
await fs_extra_1.default.ensureFile(path_1.default.resolve(compPath, 'App.vue'));
const compTpl = await fs_extra_1.default.readFile(path_1.default.resolve(__dirname, '../../../design-platform-tpl/App.vue.njk'), 'utf8');
const compNun = nunjucks_1.default.compile(compTpl);
const compView = compNun.render({ comp });
await fs_extra_1.default.writeFile(path_1.default.resolve(compPath, 'App.vue'), compView);
}
const editorPath = path_1.default.resolve(proPath, `showcase-editor/src/editors/${comp.code}`);
const isEditorExist = await fs_extra_1.default.pathExists(editorPath);
if (!isEditorExist) {
await fs_extra_1.default.ensureDir(editorPath);
await fs_extra_1.default.copy(path_1.default.resolve(__dirname, '../../../design-platform-tpl/editor-tpl'), editorPath);
await fs_extra_1.default.remove(path_1.default.resolve(editorPath, 'editor.js.njk'));
const editorTpl = await fs_extra_1.default.readFile(path_1.default.resolve(__dirname, '../../../design-platform-tpl/editor-tpl/editor.js.njk'), 'utf8');
const editorNun = nunjucks_1.default.compile(editorTpl);
const editorView = editorNun.render({ comp });
await fs_extra_1.default.writeFile(path_1.default.resolve(editorPath, 'editor.js'), editorView);
}
const mpPath = path_1.default.resolve(proPath, `mp-extension/src/pages/home/feature/custom-components/${comp.code}`);
const isMpExist = await fs_extra_1.default.pathExists(mpPath);
if (!isMpExist) {
}
return result.data;
}
async updateComp(params) {
const result = await this.dpRequestService.updateDpComponent(params, {
projectName: params.appName,
});
return result;
}
async deleteComp(params) {
const { proPath } = params, otherParams = tslib_1.__rest(params, ["proPath"]);
const result = await this.dpRequestService.removeDpComponent(otherParams, {
projectName: otherParams.appName,
});
if (+result.code !== 0 && +result.code !== 200) {
return result;
}
const compPath = path_1.default.resolve(proPath, `showcase-components/src/${params.componentCode}`);
const editorPath = path_1.default.resolve(proPath, `showcase-editor/src/editors/${params.componentCode}`);
const isCompExist = await fs_extra_1.default.pathExists(compPath);
const isEditorExist = await fs_extra_1.default.pathExists(editorPath);
if (isCompExist) {
await fs_extra_1.default.remove(compPath);
}
if (isEditorExist) {
await fs_extra_1.default.remove(editorPath);
}
return {};
}
};
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], CustomCompsService.prototype, "projectService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], CustomCompsService.prototype, "configService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], CustomCompsService.prototype, "customApiService", void 0);
tslib_1.__decorate([
(0, spring4js_nodejs_1.Resource)()
], CustomCompsService.prototype, "dpRequestService", void 0);
CustomCompsService = tslib_1.__decorate([
(0, spring4js_nodejs_1.Service)()
], CustomCompsService);
exports.default = CustomCompsService;
;