apprecio-mcp-base 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/cli/dist/generate-feature.d.ts +3 -0
  2. package/cli/dist/generate-feature.d.ts.map +1 -0
  3. package/cli/dist/generate-feature.js +0 -0
  4. package/cli/dist/generate-feature.js.map +1 -0
  5. package/cli/dist/generators/feature-generator.d.ts +3 -0
  6. package/cli/dist/generators/feature-generator.d.ts.map +1 -0
  7. package/cli/dist/generators/feature-generator.js +19 -0
  8. package/cli/dist/generators/feature-generator.js.map +1 -0
  9. package/cli/dist/generators/init-generator.d.ts +13 -0
  10. package/cli/dist/generators/init-generator.d.ts.map +1 -0
  11. package/cli/dist/generators/init-generator.js +799 -0
  12. package/cli/dist/generators/init-generator.js.map +1 -0
  13. package/cli/dist/generators/main-updater.d.ts +2 -0
  14. package/cli/dist/generators/main-updater.d.ts.map +1 -0
  15. package/cli/dist/generators/main-updater.js +64 -0
  16. package/cli/dist/generators/main-updater.js.map +1 -0
  17. package/cli/dist/generators/router-generator.d.ts +3 -0
  18. package/cli/dist/generators/router-generator.d.ts.map +1 -0
  19. package/cli/dist/generators/router-generator.js +150 -0
  20. package/cli/dist/generators/router-generator.js.map +1 -0
  21. package/cli/dist/generators/service-generator.d.ts +3 -0
  22. package/cli/dist/generators/service-generator.d.ts.map +1 -0
  23. package/cli/dist/generators/service-generator.js +151 -0
  24. package/cli/dist/generators/service-generator.js.map +1 -0
  25. package/cli/dist/generators/validation-generator.d.ts +3 -0
  26. package/cli/dist/generators/validation-generator.d.ts.map +1 -0
  27. package/cli/dist/generators/validation-generator.js +62 -0
  28. package/cli/dist/generators/validation-generator.js.map +1 -0
  29. package/cli/dist/types.d.ts +27 -0
  30. package/cli/dist/types.d.ts.map +1 -0
  31. package/cli/dist/types.js +2 -0
  32. package/cli/dist/types.js.map +1 -0
  33. package/cli/dist/utils/naming.d.ts +31 -0
  34. package/cli/dist/utils/naming.d.ts.map +1 -0
  35. package/cli/dist/utils/naming.js +65 -0
  36. package/cli/dist/utils/naming.js.map +1 -0
  37. package/cli/package.json +13 -3
  38. package/package.json +5 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-generator.js","sourceRoot":"","sources":["../../generators/init-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function updateMainFile(featureName: string, entityName: string): Promise<void>;
2
+ //# sourceMappingURL=main-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-updater.d.ts","sourceRoot":"","sources":["../../generators/main-updater.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE3F"}
@@ -0,0 +1,64 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { toCamelCase } from '../utils/naming.js';
4
+ export async function updateMainFile(featureName, entityName) {
5
+ const mainPath = path.join(process.cwd(), 'src', 'main.ts');
6
+ // Leer archivo actual
7
+ let mainContent = await fs.readFile(mainPath, 'utf-8');
8
+ const featureVarName = `${toCamelCase(featureName)}Feature`;
9
+ // 1. Agregar import del feature
10
+ const featureImport = `import { ${featureVarName} } from './features/${featureName}/${featureName}.feature.js';\n`;
11
+ // Verificar si ya existe el import
12
+ if (mainContent.includes(featureImport)) {
13
+ console.log(`Import de ${featureVarName} ya existe, saltando...`);
14
+ }
15
+ else {
16
+ // Buscar el último import existente y agregar después
17
+ const importRegex = /^import\s+.*from\s+['"].*['"];?\s*$/gm;
18
+ const imports = mainContent.match(importRegex);
19
+ if (imports && imports.length > 0) {
20
+ // Encontrar la posición del último import
21
+ const lastImport = imports[imports.length - 1];
22
+ const lastImportIndex = mainContent.lastIndexOf(lastImport);
23
+ const insertPosition = lastImportIndex + lastImport.length;
24
+ // Insertar después del último import
25
+ mainContent =
26
+ mainContent.slice(0, insertPosition) +
27
+ '\n' + featureImport +
28
+ mainContent.slice(insertPosition);
29
+ }
30
+ else {
31
+ // Si no hay imports, agregar al inicio del archivo
32
+ mainContent = featureImport + '\n' + mainContent;
33
+ }
34
+ }
35
+ // 2. Agregar this.registerFeature() dentro de registerFeatures()
36
+ const featureRegistration = ` this.registerFeature('${featureName}', ${featureVarName});\n`;
37
+ if (!mainContent.includes(`registerFeature('${featureName}'`)) {
38
+ // Buscar el método registerFeatures() y agregar ANTES del logger.info
39
+ const registerFeaturesRegex = /(protected async registerFeatures\(\): Promise<void> {[\s\S]*?)( logger\.info\(['"]All.*features registered)/;
40
+ if (registerFeaturesRegex.test(mainContent)) {
41
+ mainContent = mainContent.replace(registerFeaturesRegex, `$1${featureRegistration}\n$2`);
42
+ }
43
+ else {
44
+ // Si no existe el logger.info, agregar al final del método antes del cierre
45
+ const altRegex = /(protected async registerFeatures\(\): Promise<void> {[\s\S]*?this\.registerFeature\([^)]+\);[\s\S]*?)( })/;
46
+ if (altRegex.test(mainContent)) {
47
+ mainContent = mainContent.replace(altRegex, `$1${featureRegistration}$2`);
48
+ }
49
+ else {
50
+ // Si es el primer feature, crear estructura completa
51
+ const emptyMethodRegex = /(protected async registerFeatures\(\): Promise<void> {\s*)( })/;
52
+ if (emptyMethodRegex.test(mainContent)) {
53
+ mainContent = mainContent.replace(emptyMethodRegex, `$1${featureRegistration}\n logger.info('All Apprecio features registered successfully');\n$2`);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ else {
59
+ console.log(`Feature ${featureName} ya está registrado, saltando...`);
60
+ }
61
+ // Escribir archivo actualizado
62
+ await fs.writeFile(mainPath, mainContent);
63
+ }
64
+ //# sourceMappingURL=main-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-updater.js","sourceRoot":"","sources":["../../generators/main-updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GenerateFeatureOptions } from '../types.js';
2
+ export declare function generateRouter(options: GenerateFeatureOptions): Promise<string>;
3
+ //# sourceMappingURL=router-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-generator.d.ts","sourceRoot":"","sources":["../../generators/router-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAsB,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4DrF"}
@@ -0,0 +1,150 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { toCamelCase, toPascalCase, toSnakeCase } from '../utils/naming.js';
4
+ export async function generateRouter(options) {
5
+ const { featureName, featureDescription, entityName, tools, featurePath, serviceType } = options;
6
+ const className = toPascalCase(featureName);
7
+ const entityPascal = toPascalCase(entityName);
8
+ const instanceName = `${toCamelCase(featureName)}Instance`;
9
+ let routerContent = '';
10
+ // Imports
11
+ routerContent += `import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n`;
12
+ routerContent += `import { z } from 'zod';\n`;
13
+ routerContent += `import type { FeatureModule } from 'apprecio-mcp-base';\n`;
14
+ routerContent += `import { logger } from 'apprecio-mcp-base';\n`;
15
+ if (serviceType !== 'none') {
16
+ routerContent += `import ${className} from './${featureName}.service.js';\n`;
17
+ }
18
+ routerContent += `\n\n`;
19
+ // Crear instancia del service (si existe)
20
+ if (serviceType !== 'none') {
21
+ routerContent += `const ${instanceName} = new ${className}();\n\n`;
22
+ }
23
+ // Exportar FeatureModule
24
+ routerContent += `export const ${toCamelCase(featureName)}Feature: FeatureModule = {\n`;
25
+ routerContent += ` name: '${featureName}',\n`;
26
+ routerContent += ` register(mcpServer: McpServer): void {\n`;
27
+ // Generar cada tool
28
+ tools.forEach((tool) => {
29
+ const toolContent = generateToolDefinition(tool, featureName, entityName, entityPascal, serviceType, instanceName);
30
+ routerContent += toolContent + '\n';
31
+ });
32
+ // Cerrar register function
33
+ routerContent += ` logger.info('${featureName} feature tools registered successfully');\n`;
34
+ routerContent += ` },\n\n`;
35
+ // Initialize function
36
+ routerContent += ` async initialize(): Promise<void> {\n`;
37
+ routerContent += ` logger.info('Initializing ${featureName} feature...');\n`;
38
+ routerContent += ` // TODO: Add initialization logic here\n`;
39
+ routerContent += ` },\n\n`;
40
+ // Cleanup function
41
+ routerContent += ` async cleanup(): Promise<void> {\n`;
42
+ routerContent += ` logger.info('Cleaning up ${featureName} feature...');\n`;
43
+ routerContent += ` // TODO: Add cleanup logic here\n`;
44
+ routerContent += ` },\n`;
45
+ routerContent += `};\n`;
46
+ // Escribir archivo
47
+ const filePath = path.join(featurePath, `${featureName}.feature.ts`);
48
+ await fs.writeFile(filePath, routerContent);
49
+ return filePath;
50
+ }
51
+ function generateToolDefinition(tool, featureName, entityName, entityPascal, serviceType, instanceName) {
52
+ const toolName = toSnakeCase(tool === 'list' ? `list_${featureName}` :
53
+ tool === 'get' ? `get_${entityName}` :
54
+ tool === 'create' ? `create_${entityName}` :
55
+ tool === 'update' ? `update_${entityName}` :
56
+ tool === 'delete' ? `delete_${entityName}` :
57
+ `search_${featureName}`);
58
+ const description = getToolDescription(tool, entityName);
59
+ const inputSchema = generateInputSchema(tool, entityName);
60
+ const handler = generateToolHandler(tool, featureName, entityName, serviceType, instanceName);
61
+ let content = ` // Tool: ${description}\n`;
62
+ content += ` mcpServer.registerTool(\n`;
63
+ content += ` '${toolName}',\n`;
64
+ content += ` {\n`;
65
+ content += ` description: '${description}',\n`;
66
+ content += ` inputSchema: ${inputSchema}\n`;
67
+ content += ` },\n`;
68
+ content += ` ${handler}\n`;
69
+ content += ` );\n`;
70
+ return content;
71
+ }
72
+ function getToolDescription(tool, entityName) {
73
+ const descriptions = {
74
+ 'list': `List all ${entityName}s`,
75
+ 'get': `Get a specific ${entityName} by ID`,
76
+ 'create': `Create a new ${entityName}`,
77
+ 'update': `Update an existing ${entityName}`,
78
+ 'delete': `Delete a ${entityName}`,
79
+ 'search': `Search for ${entityName}s`
80
+ };
81
+ return descriptions[tool] || `Perform ${tool} operation on ${entityName}`;
82
+ }
83
+ function generateInputSchema(tool, entityName) {
84
+ let schema = '{\n';
85
+ if (tool === 'list') {
86
+ schema += ` page: z.number().optional().describe('Page number (number, optional)'),\n`;
87
+ schema += ` per_page: z.number().optional().describe('Results per page (number, optional)'),\n`;
88
+ schema += ` filters: z.any().optional().describe('Additional filters (object, optional)'),\n`;
89
+ }
90
+ else if (tool === 'get') {
91
+ schema += ` id: z.string().describe('${entityName} ID (string, required)'),\n`;
92
+ }
93
+ else if (tool === 'create') {
94
+ schema += ` // TODO: Agregar campos específicos del ${entityName}\n`;
95
+ schema += ` name: z.string().optional().describe('Name (string, optional)'),\n`;
96
+ schema += ` description: z.string().optional().describe('Description (string, optional)'),\n`;
97
+ }
98
+ else if (tool === 'update') {
99
+ schema += ` id: z.string().describe('${entityName} ID (string, required)'),\n`;
100
+ schema += ` // TODO: Agregar campos actualizables\n`;
101
+ schema += ` name: z.string().optional().describe('New name (string, optional)'),\n`;
102
+ }
103
+ else if (tool === 'delete') {
104
+ schema += ` id: z.string().describe('${entityName} ID (string, required)'),\n`;
105
+ }
106
+ else if (tool === 'search') {
107
+ schema += ` query: z.string().describe('Search query (string, required)'),\n`;
108
+ schema += ` filters: z.any().optional().describe('Search filters (object, optional)'),\n`;
109
+ }
110
+ schema += ` }`;
111
+ return schema;
112
+ }
113
+ function generateToolHandler(tool, featureName, entityName, serviceType, instanceName) {
114
+ const methodName = tool === 'list' ? `list${toPascalCase(featureName)}` :
115
+ tool === 'get' ? `get${toPascalCase(entityName)}` :
116
+ tool === 'create' ? `create${toPascalCase(entityName)}` :
117
+ tool === 'update' ? `update${toPascalCase(entityName)}` :
118
+ tool === 'delete' ? `delete${toPascalCase(entityName)}` :
119
+ `search${toPascalCase(featureName)}`;
120
+ let handler = `async (args, extra) => {\n`;
121
+ handler += ` try {\n`;
122
+ handler += ` // Extract token from extra context if available\n`;
123
+ handler += ` const req = extra as any;\n`;
124
+ handler += ` const token = req?.requestInfo?.headers?.authorization;\n\n`;
125
+ if (serviceType !== 'none') {
126
+ handler += ` const result = await ${instanceName}.${methodName}(args, token);\n`;
127
+ }
128
+ else {
129
+ handler += ` // TODO: Implementar lógica del ${tool}\n`;
130
+ handler += ` const result = { message: 'Not implemented yet', args };\n`;
131
+ }
132
+ handler += ` return { \n`;
133
+ handler += ` content: [{ \n`;
134
+ handler += ` type: 'text', \n`;
135
+ handler += ` text: JSON.stringify(result, null, 2) \n`;
136
+ handler += ` }] \n`;
137
+ handler += ` };\n`;
138
+ handler += ` } catch (error: any) {\n`;
139
+ handler += ` return { \n`;
140
+ handler += ` content: [{ \n`;
141
+ handler += ` type: 'text', \n`;
142
+ handler += ` text: \`Error: \${error.message}\` \n`;
143
+ handler += ` }], \n`;
144
+ handler += ` isError: true \n`;
145
+ handler += ` };\n`;
146
+ handler += ` }\n`;
147
+ handler += ` }`;
148
+ return handler;
149
+ }
150
+ //# sourceMappingURL=router-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-generator.js","sourceRoot":"","sources":["../../generators/router-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GenerateFeatureOptions } from '../types.js';
2
+ export declare function generateService(options: GenerateFeatureOptions): Promise<string>;
3
+ //# sourceMappingURL=service-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-generator.d.ts","sourceRoot":"","sources":["../../generators/service-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6DtF"}
@@ -0,0 +1,151 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { toPascalCase } from '../utils/naming.js';
4
+ export async function generateService(options) {
5
+ const { featureName, entityName, tools, serviceType, featurePath } = options;
6
+ const className = toPascalCase(featureName);
7
+ const entityPascal = toPascalCase(entityName);
8
+ let serviceContent = '';
9
+ // Header
10
+ serviceContent += `// Generated service for ${featureName}\n\n`;
11
+ // Imports basados en tipo de service
12
+ if (serviceType === 'api') {
13
+ serviceContent += `import ApiClient from '#services/api';\n`;
14
+ }
15
+ else if (serviceType === 'database') {
16
+ serviceContent += `import { MongoDBConnector } from '@apprecio/mcp-base';\n`;
17
+ }
18
+ else if (serviceType === 'mixed') {
19
+ serviceContent += `import ApiClient from '#services/api';\n`;
20
+ serviceContent += `import { MongoDBConnector } from '@apprecio/mcp-base';\n`;
21
+ }
22
+ serviceContent += `import { sanitize } from '../../utils/sanitize.js';\n\n`;
23
+ // Interfaces de opciones para cada método
24
+ serviceContent += `// --- Interfaces para Opciones de Métodos ---\n\n`;
25
+ tools.forEach(tool => {
26
+ const interfaceName = generateInterfaceName(tool, entityPascal);
27
+ const fields = generateInterfaceFields(tool, entityName);
28
+ serviceContent += `export interface ${interfaceName} ${fields}\n`;
29
+ });
30
+ serviceContent += `\n`;
31
+ // Clase del service
32
+ if (serviceType === 'api') {
33
+ serviceContent += `class ${className} extends ApiClient {\n\n`;
34
+ }
35
+ else if (serviceType === 'database') {
36
+ serviceContent += `class ${className} {\n`;
37
+ serviceContent += ` private db: MongoDBConnector;\n\n`;
38
+ serviceContent += ` constructor(db: MongoDBConnector) {\n`;
39
+ serviceContent += ` this.db = db;\n`;
40
+ serviceContent += ` }\n\n`;
41
+ }
42
+ else {
43
+ serviceContent += `class ${className} {\n\n`;
44
+ }
45
+ // Generar métodos para cada tool
46
+ tools.forEach(tool => {
47
+ const method = generateServiceMethod(tool, entityName, entityPascal, serviceType);
48
+ serviceContent += method + '\n';
49
+ });
50
+ serviceContent += `}\n\n`;
51
+ serviceContent += `export default ${className};\n`;
52
+ // Escribir archivo
53
+ const filePath = path.join(featurePath, `${featureName}.service.ts`);
54
+ await fs.writeFile(filePath, serviceContent);
55
+ return filePath;
56
+ }
57
+ function generateInterfaceName(tool, entityPascal) {
58
+ const toolMap = {
59
+ 'list': `List${entityPascal}Options`,
60
+ 'get': `Get${entityPascal}Options`,
61
+ 'create': `Create${entityPascal}Options`,
62
+ 'update': `Update${entityPascal}Options`,
63
+ 'delete': `Delete${entityPascal}Options`,
64
+ 'search': `Search${entityPascal}Options`
65
+ };
66
+ return toolMap[tool] || `${toPascalCase(tool)}${entityPascal}Options`;
67
+ }
68
+ function generateInterfaceFields(tool, entityName) {
69
+ // Campos comunes
70
+ const commonFields = `{ id?: string; `;
71
+ const fieldMap = {
72
+ 'list': `{ page?: number; per_page?: number; filters?: any; }`,
73
+ 'get': `{ id: string; }`,
74
+ 'create': `{ data: any; }`,
75
+ 'update': `{ id: string; data: any; }`,
76
+ 'delete': `{ id: string; }`,
77
+ 'search': `{ query: string; filters?: any; }`
78
+ };
79
+ return fieldMap[tool] || `{ data: any; }`;
80
+ }
81
+ function generateServiceMethod(tool, entityName, entityPascal, serviceType) {
82
+ const methodName = tool === 'list' ? `list${entityPascal}` :
83
+ tool === 'get' ? `get${entityPascal}` :
84
+ tool === 'create' ? `create${entityPascal}` :
85
+ tool === 'update' ? `update${entityPascal}` :
86
+ tool === 'delete' ? `delete${entityPascal}` :
87
+ `search${entityPascal}`;
88
+ const optionsInterface = generateInterfaceName(tool, entityPascal);
89
+ let methodContent = ` async ${methodName}(options: ${optionsInterface}, token?: string) {\n`;
90
+ if (serviceType === 'api') {
91
+ if (tool === 'list') {
92
+ methodContent += ` const { page = 1, per_page = 10, ...params } = options;\n`;
93
+ methodContent += ` return this.get('${entityName}s', { page, per_page, ...params }, token || '');\n`;
94
+ }
95
+ else if (tool === 'get') {
96
+ methodContent += ` const { id } = options;\n`;
97
+ methodContent += ` return this.get(\`${entityName}s/\${id}\`, {}, token || '');\n`;
98
+ }
99
+ else if (tool === 'create') {
100
+ methodContent += ` const { data } = options;\n`;
101
+ methodContent += ` // Sanitize data aquí si es necesario\n`;
102
+ methodContent += ` return this.post('${entityName}s', data, token || '');\n`;
103
+ }
104
+ else if (tool === 'update') {
105
+ methodContent += ` const { id, data } = options;\n`;
106
+ methodContent += ` return this.patch(\`${entityName}s/\${id}\`, data, token || '');\n`;
107
+ }
108
+ else if (tool === 'delete') {
109
+ methodContent += ` const { id } = options;\n`;
110
+ methodContent += ` return this.delete(\`${entityName}s/\${id}\`, {}, token || '');\n`;
111
+ }
112
+ else if (tool === 'search') {
113
+ methodContent += ` const { query, filters } = options;\n`;
114
+ methodContent += ` return this.get('search/${entityName}s', { q: sanitize(query), ...filters }, token || '');\n`;
115
+ }
116
+ }
117
+ else if (serviceType === 'database') {
118
+ if (tool === 'list') {
119
+ methodContent += ` const collection = this.db.getCollection('${entityName}s');\n`;
120
+ methodContent += ` const { page = 1, per_page = 10 } = options;\n`;
121
+ methodContent += ` return collection.find({}).skip((page - 1) * per_page).limit(per_page).toArray();\n`;
122
+ }
123
+ else if (tool === 'get') {
124
+ methodContent += ` const collection = this.db.getCollection('${entityName}s');\n`;
125
+ methodContent += ` const { id } = options;\n`;
126
+ methodContent += ` return collection.findOne({ _id: id });\n`;
127
+ }
128
+ else if (tool === 'create') {
129
+ methodContent += ` const collection = this.db.getCollection('${entityName}s');\n`;
130
+ methodContent += ` const { data } = options;\n`;
131
+ methodContent += ` return collection.insertOne(data);\n`;
132
+ }
133
+ else if (tool === 'update') {
134
+ methodContent += ` const collection = this.db.getCollection('${entityName}s');\n`;
135
+ methodContent += ` const { id, data } = options;\n`;
136
+ methodContent += ` return collection.updateOne({ _id: id }, { $set: data });\n`;
137
+ }
138
+ else if (tool === 'delete') {
139
+ methodContent += ` const collection = this.db.getCollection('${entityName}s');\n`;
140
+ methodContent += ` const { id } = options;\n`;
141
+ methodContent += ` return collection.deleteOne({ _id: id });\n`;
142
+ }
143
+ }
144
+ else {
145
+ methodContent += ` // TODO: Implementar lógica para ${tool}\n`;
146
+ methodContent += ` throw new Error('Not implemented');\n`;
147
+ }
148
+ methodContent += ` }\n`;
149
+ return methodContent;
150
+ }
151
+ //# sourceMappingURL=service-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-generator.js","sourceRoot":"","sources":["../../generators/service-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GenerateFeatureOptions } from '../types.js';
2
+ export declare function generateValidation(options: GenerateFeatureOptions): Promise<string>;
3
+ //# sourceMappingURL=validation-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-generator.d.ts","sourceRoot":"","sources":["../../generators/validation-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCzF"}
@@ -0,0 +1,62 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { toPascalCase } from '../utils/naming.js';
4
+ export async function generateValidation(options) {
5
+ const { featureName, entityName, tools, featurePath } = options;
6
+ const entityPascal = toPascalCase(entityName);
7
+ let validationContent = '';
8
+ // Import Zod
9
+ validationContent += `import { z } from 'zod';\n\n`;
10
+ // Campos comunes reutilizables
11
+ validationContent += `// --- Campos Comunes Reutilizables ---\n\n`;
12
+ validationContent += `const id = z.string().min(1, "ID is required.");\n`;
13
+ validationContent += `const name = z.string().min(1, "Name is required.");\n`;
14
+ validationContent += `const description = z.string().optional();\n`;
15
+ validationContent += `const page = z.number().int().positive().optional();\n`;
16
+ validationContent += `const perPage = z.number().int().positive().optional();\n`;
17
+ validationContent += `const query = z.string().min(1, "Query is required.");\n\n`;
18
+ // Generar schemas para cada tool
19
+ validationContent += `// --- Schemas de Validación por Tool ---\n\n`;
20
+ tools.forEach(tool => {
21
+ const schema = generateToolSchema(tool, entityName, entityPascal);
22
+ validationContent += schema + '\n';
23
+ });
24
+ // Escribir archivo
25
+ const filePath = path.join(featurePath, `${featureName}.validation.ts`);
26
+ await fs.writeFile(filePath, validationContent);
27
+ return filePath;
28
+ }
29
+ function generateToolSchema(tool, entityName, entityPascal) {
30
+ const schemaName = `${tool}${entityPascal}Schema`;
31
+ let schema = `export const ${schemaName} = z.object({\n`;
32
+ if (tool === 'list') {
33
+ schema += ` page,\n`;
34
+ schema += ` perPage,\n`;
35
+ schema += ` // TODO: Agregar filtros específicos\n`;
36
+ }
37
+ else if (tool === 'get') {
38
+ schema += ` id,\n`;
39
+ }
40
+ else if (tool === 'create') {
41
+ schema += ` name,\n`;
42
+ schema += ` description,\n`;
43
+ schema += ` // TODO: Agregar campos específicos del ${entityName}\n`;
44
+ }
45
+ else if (tool === 'update') {
46
+ schema += ` id,\n`;
47
+ schema += ` name: z.string().optional(),\n`;
48
+ schema += ` description,\n`;
49
+ schema += ` // TODO: Agregar campos actualizables\n`;
50
+ }
51
+ else if (tool === 'delete') {
52
+ schema += ` id,\n`;
53
+ }
54
+ else if (tool === 'search') {
55
+ schema += ` query,\n`;
56
+ schema += ` page,\n`;
57
+ schema += ` perPage,\n`;
58
+ }
59
+ schema += `});\n`;
60
+ return schema;
61
+ }
62
+ //# sourceMappingURL=validation-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-generator.js","sourceRoot":"","sources":["../../generators/validation-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA+B;IACpE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEhE,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAE3B,aAAa;IACb,iBAAiB,IAAI,8BAA8B,CAAC;IAEpD,+BAA+B;IAC/B,iBAAiB,IAAI,6CAA6C,CAAC;IACnE,iBAAiB,IAAI,oDAAoD,CAAC;IAC1E,iBAAiB,IAAI,wDAAwD,CAAC;IAC9E,iBAAiB,IAAI,8CAA8C,CAAC;IACpE,iBAAiB,IAAI,wDAAwD,CAAC;IAC9E,iBAAiB,IAAI,2DAA2D,CAAC;IACjF,iBAAiB,IAAI,4DAA4D,CAAC;IAElF,iCAAiC;IACjC,iBAAiB,IAAI,+CAA+C,CAAC;IAErE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjB,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAClE,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,gBAAgB,CAAC,CAAC;IACxE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEhD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,UAAkB,EAAE,YAAoB;IAC9E,MAAM,UAAU,GAAG,GAAG,IAAI,GAAG,YAAY,QAAQ,CAAC;IAElD,IAAI,MAAM,GAAG,gBAAgB,UAAU,iBAAiB,CAAC;IAEzD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,CAAC;QACxB,MAAM,IAAI,gBAAgB,CAAC;QAC3B,MAAM,IAAI,4CAA4C,CAAC;IAC3D,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,aAAa,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAAC;QAC/B,MAAM,IAAI,+CAA+C,UAAU,IAAI,CAAC;IAC5E,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,WAAW,CAAC;QACtB,MAAM,IAAI,oCAAoC,CAAC;QAC/C,MAAM,IAAI,oBAAoB,CAAC;QAC/B,MAAM,IAAI,6CAA6C,CAAC;IAC5D,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,WAAW,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,CAAC;QACzB,MAAM,IAAI,aAAa,CAAC;QACxB,MAAM,IAAI,gBAAgB,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,OAAO,CAAC;IAElB,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface GenerateFeatureOptions {
2
+ featureName: string;
3
+ featureDescription: string;
4
+ entityName: string;
5
+ tools: string[];
6
+ serviceType: 'api' | 'database' | 'mixed' | 'custom' | 'none';
7
+ featurePath: string;
8
+ }
9
+ export interface GenerateToolOptions {
10
+ featureName: string;
11
+ toolName: string;
12
+ toolDescription: string;
13
+ addToService: boolean;
14
+ }
15
+ export interface ToolDefinition {
16
+ name: string;
17
+ description: string;
18
+ inputSchema: Record<string, any>;
19
+ methodName: string;
20
+ }
21
+ export interface ServiceMethodDefinition {
22
+ name: string;
23
+ params: string[];
24
+ returnType: string;
25
+ implementation: string;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9D,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Convierte string a camelCase
3
+ * Ejemplo: gift_cards -> giftCards
4
+ */
5
+ export declare function toCamelCase(str: string): string;
6
+ /**
7
+ * Convierte string a PascalCase
8
+ * Ejemplo: gift_cards -> GiftCards
9
+ */
10
+ export declare function toPascalCase(str: string): string;
11
+ /**
12
+ * Convierte string a snake_case
13
+ * Ejemplo: giftCards -> gift_cards
14
+ */
15
+ export declare function toSnakeCase(str: string): string;
16
+ /**
17
+ * Convierte string a kebab-case
18
+ * Ejemplo: giftCards -> gift-cards
19
+ */
20
+ export declare function toKebabCase(str: string): string;
21
+ /**
22
+ * Pluraliza un nombre simple
23
+ * Ejemplo: card -> cards, category -> categories
24
+ */
25
+ export declare function pluralize(str: string): string;
26
+ /**
27
+ * Singulariza un nombre simple
28
+ * Ejemplo: cards -> card, categories -> category
29
+ */
30
+ export declare function singularize(str: string): string;
31
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../utils/naming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ/C"}