omelop-gen-route
Version:
解析 ts 的interface 到 omelox-protobuf用的 json格式。
174 lines • 5.57 kB
JavaScript
;
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