@stilljs/cli
Version:
This is the CLI tool for StillJS Framework
115 lines (83 loc) • 3.45 kB
JavaScript
import { FileHelper } from "./FileHelper.js"
import colors from 'yoctocolors';
export class BFFHelper {
static parseServices(servicesList = [], {homeDir = null, execDir = null}, spinner = null, cmdObj = null){
const result = BFFHelper.createBffDir({homeDir, execDir}, spinner, cmdObj);
//if(!result) return;
const RE = BFFRegex.getRE();
for(let item of servicesList){
const service = FileHelper.readServiceFile(item);
const isBff = service.match(RE.bff);
if(isBff){
BFFHelper.handleBffGenerations(service, RE)
}
}
}
static handleBffGenerations(service, RE){
service.replace(RE.bff, (_, svc, baseSvc) => {
eval(`${service}`)
console.warn(`The service: ${svc} and base is: ${baseSvc}`);
console.log(``);
console.log(`PARSING GET REQUEST`);
service.replace(RE.get, (_, path, type, rtrn, rtrnType) => {
console.warn(' Path is - ', path);
console.warn(' Type is - ', type);
console.log(` Return type: `,rtrnType);
console.log(` Return type: `,_);
//console.log(``);
});
console.log(``);
console.log(`PARSING POST REQUEST`);
service.replace(RE.post, (_, path, type, rtrn, rtrnType) => {
console.warn(' Path is - ', path);
console.warn(' Type is - ', type);
//console.log(` Return type: `,rtrnType);
});
});
}
static createBffDir = ({homeDir, execDir}, spinner = null, cmdObj) => {
try {
FileHelper.createFolder(homeDir+'bff-app');
FileHelper.copyFolder(execDir, homeDir+'bff-app');
return true;
} catch (error) {
cmdObj.newCmdLine();
spinner.error(colors.bold(colors.red(`Bff project already exists, if you which to regenerate remove it manually.`)));
cmdObj.newCmdLine();
return false;
}
}
}
class BFFRegex {
static RE_HTTP = /\s{1,}([A-Z0-9\s\/\:\?\$\_\n\t]*?)[\*\s]{1,}\@type[\s]{0,}\{\s{0,}([A-Z0-9]*?)[\s]{0,}\}[\n\t\r\*\s]{0,}(@returns){0,1}[\s]{0,}\{{0,1}\s*([A-Z0-9\_]*)\s*\}{0,1}/
static getRE = () => ({
bff: /\@BackendFrontend[\$\_A-Z0-9\n\r\t\s]*?\*\/[A-Z0-9\$\_\s]*?class\s{1,}([A-Z0-9\$\_]*?)\s{1,}extends\s(BaseService)/i,
get: new RegExp(/\@Get/.source + BFFRegex.RE_HTTP.source,'ig'),
post: new RegExp(/\@Post/.source + BFFRegex.RE_HTTP.source,'ig'),
delete: new RegExp(/\@Delete/.source + BFFRegex.RE_HTTP.source,'ig'),
put: new RegExp(/\@Put/.source + BFFRegex.RE_HTTP.source,'ig'),
patch: new RegExp(/\@Patch/.source + BFFRegex.RE_HTTP.source,'ig'),
});
}
class RustRouteContent {
fullImport = `
use axum::{
extract::{Path, Query},
response::Json,
routing::{
get,
post,
put,
delete},
Router,
};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
`;
// #[derive(Serialize, Deserialize)]
// pub struct User {
// pub id: u32,
// pub name: String,
// pub email: String,
// }
}