/** * Generador de módulos ERP * - module: bounded context (carpeta en modules/) * - name: agregado principal (usa placeholders en plantillas) * - plural: rutas/tabla (override del plural generado) */ export default function (plop) { plop.setGenerator("module", { description: "Crea un nuevo módulo (bounded context) con un agregado principal", prompts: [ { type: "input", name: "module", message: "Nombre del bounded context (kebab-case, p.ej. 'billing'):", validate: (v) => (!!v && /^[a-z0-9\-]+$/.test(v)) || "Usa kebab-case (letras, números y guiones).", filter: (v) => plop.getHelper("kebabCase")(v), }, { type: "input", name: "name", message: "Nombre del agregado principal (kebab-case, p.ej. 'customer-invoice'):", validate: (v) => (!!v && /^[a-z0-9\-]+$/.test(v)) || "Usa kebab-case (letras, números y guiones).", filter: (v) => plop.getHelper("kebabCase")(v), }, { type: "input", name: "plural", message: "Nombre plural para las rutas/tabla (kebab-case):", default: (answers) => `${plop.getHelper("kebabCase")(answers.name)}s`, filter: (v) => plop.getHelper("kebabCase")(v), }, ], actions: [ { type: "addMany", destination: "modules/{{kebabCase module}}", base: "templates/new-module", templateFiles: "templates/new-module/**", }, ], }); }