UNPKG

youzanyun-devtool-worker

Version:

- web - ws - proxy

139 lines (138 loc) 5.71 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 download_1 = tslib_1.__importDefault(require("download")); const AppHandler_1 = tslib_1.__importDefault(require("./AppHandler")); const spring4js_nodejs_1 = require("spring4js-nodejs"); let MiniProgramService = class MiniProgramService { constructor() { this.serverGuideInfoMap = {}; this.appCustomHandlerCache = {}; this.categoryHandlerCache = {}; this.pageHandlerCache = {}; } async start() { this.guideConfigDir = this.configService.getMpGuideConfigDir(); this.guideLocalDevelop = this.configService.isMpGuideLocalDevelop(); let packageJson = await fs_extra_1.default.readJson(path_1.default.resolve(this.configService.getWorkerDir(), 'package.json')); this.devtoolVersion = packageJson.version; await fs_extra_1.default.ensureDir(this.guideConfigDir); this.serverGuideInfoMap = { "wsc-mp": { name: 'wsc-mp', version: '0.0.27', url: 'https://file.yzcdn.cn/upload_files/yz-file/2020/09/17/Fu9aABOVnwPzz9vFqMjWyNS5A5D_.gz' }, "retail-mp": { name: 'retail-mp', version: '0.0.6', url: 'https://file.yzcdn.cn/upload_files/yz-file/2020/10/10/FpxzUxAUqFeWBG-xZtfAKq0CXd_5.gz' }, "beauty-mp": { name: 'beauty-mp', version: '0.0.1', url: 'http://file.yzcdn.cn/upload_files/yz-file/2020/04/01/FpXkipG46X4Fnt5myk7o6ycTC-8P.gz' } }; } async getAppCustomHandler({ projectId, youzanMpName }) { let cacheKey = `${projectId}-${youzanMpName}`; let handler = this.appCustomHandlerCache[cacheKey]; if (handler) { return handler; } if (!this.guideLocalDevelop) { await this.checkGuideConfigUpdated(youzanMpName); } let project = await this.projectService.getProjectById(projectId); handler = new AppHandler_1.default({ projectId, projectRootDir: project.proPath, projectName: project.proName, youzanMpName, guideConfigDir: path_1.default.resolve(this.guideConfigDir, youzanMpName), devtoolVersion: this.devtoolVersion }); await handler.start(); if (!this.guideLocalDevelop) { this.appCustomHandlerCache[cacheKey] = handler; } return handler; } async getCategoryHandler({ projectId, youzanMpName, categoryName }) { let cacheKey = `${projectId}-${youzanMpName}-${categoryName}`; let categoryHandler = this.categoryHandlerCache[cacheKey]; if (categoryHandler) { return categoryHandler; } let appHandler = await this.getAppCustomHandler({ projectId, youzanMpName }); categoryHandler = await appHandler.getCategoryHandler({ categoryName }); if (!this.guideLocalDevelop) { this.categoryHandlerCache[cacheKey] = categoryHandler; } return categoryHandler; } async getPageHandler({ projectId, youzanMpName, categoryName, pageName, version }) { let cacheKey = `${projectId}-${youzanMpName}-${categoryName}-${pageName}-${version}`; let pageHandler = this.pageHandlerCache[cacheKey]; if (pageHandler) { return pageHandler; } let categoryHandler = await this.getCategoryHandler({ projectId, youzanMpName, categoryName, }); pageHandler = await categoryHandler.getPageHandler({ pageName, version }); if (!this.guideLocalDevelop) { this.pageHandlerCache[cacheKey] = pageHandler; } return pageHandler; } async checkGuideConfigUpdated(youzanMpName) { let guideDir = path_1.default.resolve(this.guideConfigDir, youzanMpName); let exist = await fs_extra_1.default.pathExists(guideDir); let serverGuideInfo = this.serverGuideInfoMap[youzanMpName]; if (exist) { try { let guideInfo = await fs_extra_1.default.readJson(path_1.default.resolve(guideDir, 'guide.meta.json')); if (guideInfo.version == serverGuideInfo.version) { return; } } catch (e) { console.log(`${youzanMpName}向导升级异常`, e); } } await this.downloadGuideConfig(youzanMpName, serverGuideInfo.url, serverGuideInfo.version); } async downloadGuideConfig(mpName, url, version) { let dir = path_1.default.resolve(this.guideConfigDir, mpName); await fs_extra_1.default.remove(dir); await download_1.default(url, dir, { extract: true, strip: 1, }); let guideMetaJson = { version, downloadTimestamp: Date.now(), downloadUrl: url }; await fs_extra_1.default.writeJson(path_1.default.resolve(dir, 'guide.meta.json'), guideMetaJson, { spaces: 2 }); } }; tslib_1.__decorate([ spring4js_nodejs_1.Resource() ], MiniProgramService.prototype, "projectService", void 0); tslib_1.__decorate([ spring4js_nodejs_1.Resource() ], MiniProgramService.prototype, "configService", void 0); MiniProgramService = tslib_1.__decorate([ spring4js_nodejs_1.Service() ], MiniProgramService); exports.default = MiniProgramService; ;