youzanyun-devtool-worker
Version:
- web - ws - proxy
139 lines (138 loc) • 5.71 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 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;
;