export const frameworks = [ ['react','React'],['vue','Vue'],['svelte','Svelte'],['solid','Solid'], ['preact','Preact'],['qwik','Qwik'],['lit','Lit'],['vanilla','Vanilla'], ['angular','Angular'],['alpine','Alpine.js'],['stencil','Stencil'],['htmx','HTMX'],['stimulus','Stimulus'], ].map(([value,label])=>({value,label})); export const shells=[{value:'astro',label:'Astro'},{value:'next',label:'Next.js'},...frameworks]; // A conservative preview contract. No user text is evaluated or executed. export function buildCommand({operation,name,framework,shell,noInstall}) { if(!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(name)||name.length>48) return {command:'',error:'Usa entre 1 y 48 caracteres: letras minúsculas, números y guiones simples.'}; if(/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/.test(name)) return {command:'',error:'Elige un nombre que no esté reservado por Windows.'}; if(!frameworks.some(f=>f.value===framework)) return {command:'',error:'Selecciona un framework compatible.'}; if(operation==='add') return {command:`wu add ${framework} ${name}${noInstall?' --no-install':''}`,error:''}; if(operation!=='create'||!shells.some(f=>f.value===shell)) return {command:'',error:'Selecciona una operación y un shell compatibles.'}; return {command:`wu create ${name} --template ${framework} --shell ${shell}`,error:''}; }