UNPKG

omelop-gen-route

Version:

解析 ts 的interface 到 omelox-protobuf用的 json格式。

174 lines 5.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.genHTTPRouteFile = exports.genWSMapRouteFile = exports.genWSLocalRouteFile = exports.genWSRouteFile = void 0; const fs = require("fs"); const path = require("path"); const util = require("util"); function walkDir(dir, handler, filters = []) { fs.readdirSync(dir).forEach(function (filename) { if (filters.indexOf(filename) !== -1) { return; } // console.log('walkDir=', filename) const _path = dir + '/' + filename; const stat = fs.statSync(_path); if (stat && stat.isDirectory()) { walkDir(_path, handler, filters); } else { if (handler) { handler(_path); } } }); } function genWSRouteFile(routeSrcDir, routeFilePath) { const tsFileNames = []; walkDir(routeSrcDir, (val) => { if (!val.endsWith('.ts')) { return; } tsFileNames.push(path.parse(val).name); }, ['impl']); let dicObj = {}; for (let item of tsFileNames) { let arr = item.split('.'); if (arr.length !== 3) { continue; } let serverTag = arr[0]; let moduleTag = arr[1]; if (moduleTag.endsWith('Handler')) { moduleTag = moduleTag.substr(0, moduleTag.search('Handler')); } let nameTag = arr[2]; let typeTag = ''; if (nameTag.startsWith('c_')) { typeTag = 'request'; } else if (nameTag.startsWith('s_')) { typeTag = 'push'; } else if (nameTag.startsWith('n_')) { typeTag = 'notify'; } else { continue; } if (!dicObj[serverTag]) { dicObj[serverTag] = {}; } if (!dicObj[serverTag][moduleTag]) { dicObj[serverTag][moduleTag] = {}; } if (!dicObj[serverTag][moduleTag][typeTag]) { dicObj[serverTag][moduleTag][typeTag] = {}; } dicObj[serverTag][moduleTag][typeTag][nameTag] = item; } let data = `export const wsPushRoutes = ${util.inspect(dicObj, { depth: 10 })}`; fs.writeFileSync(routeFilePath, data); } exports.genWSRouteFile = genWSRouteFile; function genWSLocalRouteFile(routeSrcDir, routeFilePath) { const tsFileNames = []; walkDir(routeSrcDir, (val) => { if (!val.endsWith('.ts')) { return; } tsFileNames.push(path.parse(val).name); }, ['impl']); let dicObj = {}; for (let item of tsFileNames) { let arr = item.split('.'); if (arr.length !== 3) { continue; } let serverTag = arr[0]; let moduleTag = arr[1]; if (moduleTag.endsWith('Handler')) { moduleTag = moduleTag.substr(0, moduleTag.search('Handler')); } let nameTag = arr[2]; let typeTag = ''; if (nameTag.startsWith('c_')) { typeTag = 'request'; } else if (nameTag.startsWith('s_')) { typeTag = 'push'; } else if (nameTag.startsWith('n_')) { typeTag = 'notify'; } else { continue; } if (!dicObj[serverTag]) { dicObj[serverTag] = {}; } if (!dicObj[serverTag][moduleTag]) { dicObj[serverTag][moduleTag] = {}; } if (!dicObj[serverTag][moduleTag][typeTag]) { dicObj[serverTag][moduleTag][typeTag] = {}; } dicObj[serverTag][moduleTag][typeTag][nameTag] = nameTag; } let data = `export const wsLocalRoutes = ${util.inspect(dicObj, { depth: 10 })}`; fs.writeFileSync(routeFilePath, data); } exports.genWSLocalRouteFile = genWSLocalRouteFile; function genWSMapRouteFile(routeSrcDir, routeFilePath) { const tsFileNames = []; walkDir(routeSrcDir, (val) => { if (!val.endsWith('.ts')) { return; } tsFileNames.push(path.parse(val).name); }, ['impl']); let dicObj = {}; for (let item of tsFileNames) { let arr = item.split('.'); if (arr.length !== 3) { continue; } let nameTag = arr[2]; dicObj[item] = nameTag; } let data = `export const wsMapRoutes = ${util.inspect(dicObj, { depth: 10 })}`; fs.writeFileSync(routeFilePath, data); } exports.genWSMapRouteFile = genWSMapRouteFile; function genHTTPRouteFile(routeSrcDir, routeFilePath) { const tsFileNames = []; walkDir(routeSrcDir, (val) => { if (!val.endsWith('.ts')) { return; } tsFileNames.push(path.parse(val).name); }, ['impl']); let dicObj = {}; for (let item of tsFileNames) { let arr = item.split('.'); if (arr.length !== 3) { continue; } let serverTag = arr[0]; let moduleTag = arr[1]; if (moduleTag.endsWith('Handler')) { moduleTag = moduleTag.substr(0, moduleTag.search('Handler')); } let nameTag = arr[2]; if (!dicObj[serverTag]) { dicObj[serverTag] = {}; } if (!dicObj[serverTag][moduleTag]) { dicObj[serverTag][moduleTag] = {}; } dicObj[serverTag][moduleTag][nameTag] = `/${item.replace(/\./g, '/')}`; } let data = `export const httpRoutes = ${util.inspect(dicObj, { depth: 10 })}`; fs.writeFileSync(routeFilePath, data); } exports.genHTTPRouteFile = genHTTPRouteFile; //# sourceMappingURL=utils.js.map