UNPKG

node-apis

Version:

🚀 Advanced TypeScript API generator with clean architecture, comprehensive testing, and automatic formatting. Generate production-ready Node.js APIs with complete integration test suites.

117 lines (108 loc) • 4.01 kB
"use strict"; /** * Custom controller templates */ Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCustomControllerContent = exports.getCustomControllerFileNames = void 0; /** * Gets custom controller file names for a module */ const getCustomControllerFileNames = ({ customNames, moduleName, }) => { return customNames.map(customName => `${customName}.${moduleName}.ts`); }; exports.getCustomControllerFileNames = getCustomControllerFileNames; /** * Generates TypeScript controller file content for custom operations */ const generateCustomControllerContent = ({ customName, moduleName, framework = 'express', }) => { const capitalizedModule = moduleName.charAt(0).toUpperCase() + moduleName.slice(1); const capitalizedCustom = customName.charAt(0).toUpperCase() + customName.slice(1); return generateGenericCustomControllerContent(customName, capitalizedModule, capitalizedCustom, moduleName, framework); }; exports.generateCustomControllerContent = generateCustomControllerContent; /** * Generates generic custom controller content */ const generateGenericCustomControllerContent = (customName, capitalizedModule, _capitalizedCustom, moduleName, framework = 'express') => { if (framework === 'hono') { return `import type { Context } from 'hono'; import { validatePayload } from '../validators/${customName}.${moduleName}'; import { ${customName}${capitalizedModule} as ${customName}${capitalizedModule}Service } from '../services/${customName}.${moduleName}'; import { randomBytes } from 'crypto'; export const ${customName}${capitalizedModule} = async (c: Context): Promise<Response> => { const requestId = randomBytes(16).toString('hex'); try { const body = await c.req.json(); // Validate request payload const validation = validatePayload(body); if (!validation.success) { return c.json({ data: null, error: { code: 'VALIDATION_ERROR', message: validation.error.message, statusCode: 400, requestId } }, 400); } // Call service layer with requestId const result = await ${customName}${capitalizedModule}Service({ ...validation.data, requestId }); // Return service result const statusCode = result.error ? result.error.statusCode || 500 : 200; return c.json(result, statusCode); } catch (error) { return c.json({ data: null, error: { code: 'INTERNAL_ERROR', message: 'Failed to process request', statusCode: 500, requestId } }, 500); } }; `; } return `import type { Request, Response } from 'express'; import { validatePayload } from '../validators/${customName}.${moduleName}'; import { ${customName}${capitalizedModule} as ${customName}${capitalizedModule}Service } from '../services/${customName}.${moduleName}'; import { randomBytes } from 'crypto'; export const ${customName}${capitalizedModule} = async (req: Request, res: Response): Promise<void> => { const requestId = randomBytes(16).toString('hex'); try { // Validate request payload const validation = validatePayload(req.body); if (!validation.success) { res.status(400).json({ data: null, error: { code: 'VALIDATION_ERROR', message: validation.error.message, statusCode: 400, requestId } }); return; } // Call service layer with requestId const result = await ${customName}${capitalizedModule}Service({ ...validation.data, requestId }); // Return service result const statusCode = result.error ? result.error.statusCode || 500 : 200; res.status(statusCode).json(result); } catch (error) { res.status(500).json({ data: null, error: { code: 'INTERNAL_ERROR', message: 'Failed to process request', statusCode: 500, requestId } }); } }; `; }; //# sourceMappingURL=custom.controllers.js.map