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
JavaScript
;
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