UNPKG

youzanyun-devtool-worker

Version:

87 lines (86 loc) 3.62 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 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 (0, 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 (0, 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; ;