UNPKG

hotshot-mod-manager

Version:

97 lines (80 loc) 2.67 kB
import inquirer from "inquirer"; import fs from "node:fs"; import path from "node:path"; import { cleanupString, configPath, getConfig, nameFixer } from "../main.js"; export async function generateServiceTrigger() { const { routerModules } = await getConfig(); if (routerModules?.length === 0) { throw new Error("No router modules found."); } const { serviceName, routerModule } = await inquirer.prompt([ { type: "list", name: "routerModule", message: "Select a router module:", choices: routerModules.map((m) => m.name), validate: (input) => input.trim() ? true : "Router module cannot be empty.", }, { type: "input", name: "serviceName", message: "Enter the name of the service:", validate: (input) => input.trim() ? true : "Service name cannot be empty.", }, ]); if (serviceName) { await generateService(routerModule, cleanupString(serviceName)); } } export async function generateService(modName, serviceName) { const config = await getConfig(); const routerModule = config.routerModules.find((m) => m.name === modName); if (!routerModule) { throw new Error(`Router Module '${modName}' not found.`); } if (routerModule.services.includes(`${serviceName}_service`)) { throw new Error(`Service '${serviceName}' already exists.`); } const serviceContent = serviceContents(serviceName); /* |----------------------------------------------------------------------- | File System IO |----------------------------------------------------------------------- */ const serviceDirPath = path.join( process.cwd(), "src", "router_modules", `${modName}_module`, ); fs.writeFileSync( path.join(serviceDirPath, `${serviceName}_services.ts`), serviceContent, ); /* |----------------------------------------------------------------------- | Config Update |----------------------------------------------------------------------- */ routerModule.services.push(`${serviceName}_services`); const updatedConfigContent = JSON.stringify(config, null, 2); fs.writeFileSync(configPath, updatedConfigContent); } /* |----------------------------------------------------------------------- | Service Contents |----------------------------------------------------------------------- */ function serviceContents(serviceName) { const serviceClassName = `${nameFixer(serviceName, true)}Services`; return ` import {response} from "@a4arpon/hotshot"; export class ${serviceClassName} { async ${serviceName}() { return response("Hi from ${serviceName}!"); } } `; }