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.

143 lines (139 loc) • 5.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateMergedT3RouterContent = exports.generateServicesT3RouterContent = exports.generateCustomT3RouterContent = exports.generateT3RouterContent = exports.parseT3RouterOperations = void 0; /** * T3 Stack tRPC router template for generating module routers */ const naming_utils_1 = require("../shared/utils/naming.utils"); /** * Parse existing T3 router file and extract operations */ const parseT3RouterOperations = (content) => { const operations = []; // Match the createTRPCRouter object const routerMatch = content.match(/createTRPCRouter\(\{([^}]+)\}\)/s); if (!routerMatch) { return operations; } const routerBody = routerMatch[1]; // Extract operation names (keys in the router object) const operationMatches = routerBody.matchAll(/^\s*(\w+):\s*\w+Procedure,?/gm); for (const match of operationMatches) { if (match[1]) { operations.push(match[1]); } } return operations; }; exports.parseT3RouterOperations = parseT3RouterOperations; const generateT3RouterContent = ({ moduleName, operations = ['create', 'get', 'list', 'update', 'delete'], }) => { const naming = (0, naming_utils_1.getModuleNaming)(moduleName); // Generate imports for each operation const procedureImports = operations .map(operation => { const procedureName = operation === 'list' ? `list${naming.class}sProcedure` : `${operation}${naming.class}Procedure`; return `import { ${procedureName} } from "../${naming.variable}/procedures/${operation}.${naming.file}";`; }) .join('\n'); // Generate router object properties const routerProperties = operations .map(operation => { const procedureName = operation === 'list' ? `list${naming.class}sProcedure` : `${operation}${naming.class}Procedure`; return ` ${operation}: ${procedureName},`; }) .join('\n'); return `import { createTRPCRouter } from "~/server/api/trpc"; ${procedureImports} export const ${naming.variable}Router = createTRPCRouter({ ${routerProperties} }); `; }; exports.generateT3RouterContent = generateT3RouterContent; const generateCustomT3RouterContent = ({ moduleName, operations, }) => { const naming = (0, naming_utils_1.getModuleNaming)(moduleName); // Generate imports for each custom operation const procedureImports = operations .map(operation => { const procedureName = `${operation}${naming.class}Procedure`; return `import { ${procedureName} } from "../${naming.variable}/procedures/${operation}.${naming.file}";`; }) .join('\n'); // Generate router object properties const routerProperties = operations .map(operation => { const procedureName = `${operation}${naming.class}Procedure`; return ` ${operation}: ${procedureName},`; }) .join('\n'); return `import { createTRPCRouter } from "~/server/api/trpc"; ${procedureImports} export const ${naming.variable}Router = createTRPCRouter({ ${routerProperties} }); `; }; exports.generateCustomT3RouterContent = generateCustomT3RouterContent; const generateServicesT3RouterContent = ({ moduleName, operations, }) => { const naming = (0, naming_utils_1.getModuleNaming)(moduleName); // Generate imports for each service operation const procedureImports = operations .map(operation => { const procedureName = `${operation}${naming.class}Procedure`; return `import { ${procedureName} } from "../${naming.variable}/procedures/${operation}.${naming.file}";`; }) .join('\n'); // Generate router object properties const routerProperties = operations .map(operation => { const procedureName = `${operation}${naming.class}Procedure`; return ` ${operation}: ${procedureName},`; }) .join('\n'); return `import { createTRPCRouter } from "~/server/api/trpc"; ${procedureImports} export const ${naming.variable}Router = createTRPCRouter({ ${routerProperties} }); `; }; exports.generateServicesT3RouterContent = generateServicesT3RouterContent; /** * Generate T3 router with merged operations (CRUD + custom) * This is the unified function that handles all operation types */ const generateMergedT3RouterContent = ({ moduleName, operations, }) => { const naming = (0, naming_utils_1.getModuleNaming)(moduleName); // Remove duplicates and sort operations const uniqueOperations = [...new Set(operations)].sort(); // Generate imports for each operation const procedureImports = uniqueOperations .map(operation => { const procedureName = operation === 'list' ? `list${naming.class}sProcedure` : `${operation}${naming.class}Procedure`; return `import { ${procedureName} } from "../${naming.variable}/procedures/${operation}.${naming.file}";`; }) .join('\n'); // Generate router object properties const routerProperties = uniqueOperations .map(operation => { const procedureName = operation === 'list' ? `list${naming.class}sProcedure` : `${operation}${naming.class}Procedure`; return `\t${operation}: ${procedureName},`; }) .join('\n'); return `import { createTRPCRouter } from "~/server/api/trpc"; ${procedureImports} export const ${naming.variable}Router = createTRPCRouter({ ${routerProperties} }); `; }; exports.generateMergedT3RouterContent = generateMergedT3RouterContent; //# sourceMappingURL=t3.router.js.map