youzanyun-devtool-worker
Version:
- web - ws - proxy
87 lines (86 loc) • 3.61 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 nunjucks_1 = tslib_1.__importDefault(require("nunjucks"));
const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
const semver_1 = tslib_1.__importDefault(require("semver"));
const PageHandler_1 = tslib_1.__importDefault(require("./PageHandler"));
class CategoryHandler {
constructor({ appHandler, categoryDir }) {
this.appHandler = appHandler;
this.categoryDir = categoryDir;
this.pageInfoMap = {};
}
async start() {
this.categoryConfig = await fs_extra_1.default.readJson(path_1.default.resolve(this.categoryDir, 'category.json'));
let env = new nunjucks_1.default.Environment(null, {
tags: {
blockStart: '{%',
blockEnd: '%}',
variableStart: '{$',
variableEnd: '$}',
commentStart: '{#',
commentEnd: '#}'
}
});
if (this.categoryConfig.document) {
let noticeTpl = await fs_extra_1.default.readFile(path_1.default.resolve(this.categoryDir, this.categoryConfig.document), 'utf8');
let template = nunjucks_1.default.compile(noticeTpl, env);
let noticeMd = template.render({});
this.document = noticeMd;
}
let pageJsonFiles = await fast_glob_1.default(['*/page.json'], {
cwd: this.categoryDir
});
for (let pageJsonFile of pageJsonFiles) {
let pageName = path_1.default.dirname(pageJsonFile);
let pageJsonAbsolutePath = path_1.default.resolve(this.categoryDir, pageJsonFile);
let pageJson = await fs_extra_1.default.readJson(pageJsonAbsolutePath);
pageJson.name = pageName;
let versionMap = {};
let pageDir = path_1.default.resolve(this.categoryDir, pageName);
let versionJsonFiles = await fast_glob_1.default(['*/version.json'], {
cwd: pageDir
});
for (let versionJsonFile of versionJsonFiles) {
let versionJson = await fs_extra_1.default.readJson(path_1.default.resolve(pageDir, versionJsonFile));
let version = path_1.default.dirname(versionJsonFile);
versionMap[version] = versionJson;
}
let versionList = Object.keys(versionMap);
if (versionList.length == 0) {
continue;
}
let sortedVersionList = versionList.sort((first, second) => {
return semver_1.default.gt(first, second) ? -1 : 0;
});
this.pageInfoMap[pageName] = {
name: pageName,
latestVersion: sortedVersionList[0],
baseInfo: pageJson,
versionInfo: versionMap,
};
}
}
async getCustomInfo() {
return {
document: this.document,
pageList: Object.values(this.pageInfoMap)
};
}
async getPageHandler({ pageName, version }) {
let pageConfigDir = path_1.default.resolve(this.categoryDir, pageName);
let pageHandler = new PageHandler_1.default({
appHandler: this.appHandler,
categoryHandler: this,
pageConfigDir,
version
});
await pageHandler.start();
return pageHandler;
}
}
exports.default = CategoryHandler;
;