/** * Actualiza imports de contextos que ya no existen */ import { readFileSync, writeFileSync, readdirSync } from 'node:fs'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { dirname } from 'node:path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const terraDir = join(__dirname, '../src'); // Mapeo de nombres de contextos antiguos a nuevos patrones const contextMap: Record = { 'AccordionRootContext': { class: 'AccordionRoot', newPattern: 'AccordionRoot.ctx' }, 'AccordionItemContext': { class: 'AccordionItemState', newPattern: 'AccordionItemState.ctx' }, 'AvatarRootContext': { class: 'AvatarRootState', newPattern: 'AvatarRootState.ctx' }, 'CalendarCellContext': { class: 'CalendarCellState', newPattern: 'CalendarCellState.ctx' }, 'CalendarRootContext': { class: 'CalendarRootState', newPattern: 'CalendarRootState.ctx' }, 'CheckboxGroupContext': { class: 'CheckboxGroupState', newPattern: 'CheckboxGroupState.ctx' }, 'CheckboxRootContext': { class: 'CheckboxRootState', newPattern: 'CheckboxRootState.ctx' }, 'CollapsibleRootContext': { class: 'CollapsibleRootState', newPattern: 'CollapsibleRootState.ctx' }, 'CommandGroupContainerContext': { class: 'CommandGroupContainerState', newPattern: 'CommandGroupContainerState.ctx' }, 'CommandListContext': { class: 'CommandListState', newPattern: 'CommandListState.ctx' }, 'CommandRootContext': { class: 'CommandRootState', newPattern: 'CommandRootState.ctx' }, 'DateFieldRootContext': { class: 'DateFieldRootState', newPattern: 'DateFieldRootState.ctx' }, 'DatePickerRootContext': { class: 'DatePickerRootState', newPattern: 'DatePickerRootState.ctx' }, 'DateRangeFieldRootContext': { class: 'DateRangeFieldRootState', newPattern: 'DateRangeFieldRootState.ctx' }, 'DateRangePickerRootContext': { class: 'DateRangePickerRootState', newPattern: 'DateRangePickerRootState.ctx' }, 'DialogRootContext': { class: 'DialogRootState', newPattern: 'DialogRootState.ctx' }, 'EditableRootContext': { class: 'EditableRootState', newPattern: 'EditableRootState.ctx' }, 'FieldRootContext': { class: 'FieldRootState', newPattern: 'FieldRootState.ctx' }, 'FileUploadItemContext': { class: 'FileUploadItemState', newPattern: 'FileUploadItemState.ctx' }, 'FileUploadRootContext': { class: 'FileUploadRootState', newPattern: 'FileUploadRootState.ctx' }, 'FormFieldContext': { class: 'FormFieldState', newPattern: 'FormFieldState.ctx' }, 'FormRootContext': { class: 'FormRootState', newPattern: 'FormRootState.ctx' }, 'LinkPreviewRootContext': { class: 'LinkPreviewRootState', newPattern: 'LinkPreviewRootState.ctx' }, 'MenuCheckboxGroupContext': { class: 'MenuCheckboxGroupState', newPattern: 'MenuCheckboxGroupState.ctx' }, 'MenuContentContext': { class: 'MenuContentState', newPattern: 'MenuContentState.ctx' }, 'MenuMenuContext': { class: 'MenuMenuState', newPattern: 'MenuMenuState.ctx' }, 'MenuRadioGroupContext': { class: 'MenuRadioGroupState', newPattern: 'MenuRadioGroupState.ctx' }, 'MenuRootContext': { class: 'MenuRootState', newPattern: 'MenuRootState.ctx' }, 'MenubarMenuContext': { class: 'MenubarMenuState', newPattern: 'MenubarMenuState.ctx' }, 'MenubarRootContext': { class: 'MenubarRootState', newPattern: 'MenubarRootState.ctx' }, 'NumberFieldRootContext': { class: 'NumberFieldRootState', newPattern: 'NumberFieldRootState.ctx' }, 'PaginationRootContext': { class: 'PaginationRootState', newPattern: 'PaginationRootState.ctx' }, 'PopoverRootContext': { class: 'PopoverRootState', newPattern: 'PopoverRootState.ctx' }, 'RadioGroupRootContext': { class: 'RadioGroupRootState', newPattern: 'RadioGroupRootState.ctx' }, 'RangeCalendarCellContext': { class: 'RangeCalendarCellState', newPattern: 'RangeCalendarCellState.ctx' }, 'RatingGroupRootContext': { class: 'RatingGroupRootState', newPattern: 'RatingGroupRootState.ctx' }, 'ScrollAreaScrollbarAxisContext': { class: 'ScrollbarAxis', newPattern: 'ScrollbarAxis.ctx' }, 'ScrollAreaScrollbarSharedContext': { class: 'ScrollAreaScrollbarSharedState', newPattern: 'ScrollAreaScrollbarSharedState.ctx' }, 'ScrollAreaScrollbarVisibleContext': { class: 'ScrollAreaScrollbarVisibleState', newPattern: 'ScrollAreaScrollbarVisibleState.ctx' }, 'ScrollAreaScrollbarContext': { class: 'ScrollAreaScrollbarState', newPattern: 'ScrollAreaScrollbarState.ctx' }, 'ScrollAreaRootContext': { class: 'ScrollAreaRootState', newPattern: 'ScrollAreaRootState.ctx' }, 'SelectContentContext': { class: 'SelectContentState', newPattern: 'SelectContentState.ctx' }, 'SelectGroupContext': { class: 'SelectGroupState', newPattern: 'SelectGroupState.ctx' }, 'SelectRootContext': { class: 'SelectRoot', newPattern: 'SelectRoot.ctx' }, 'SliderRootContext': { class: 'SliderRoot', newPattern: 'SliderRoot.ctx' }, 'SpinnerRootContext': { class: 'SpinnerRootState', newPattern: 'SpinnerRootState.ctx' }, 'SplitterRootContext': { class: 'SplitterRootState', newPattern: 'SplitterRootState.ctx' }, 'StepperItemContext': { class: 'StepperItemState', newPattern: 'StepperItemState.ctx' }, 'StepperRootContext': { class: 'StepperRootState', newPattern: 'StepperRootState.ctx' }, 'SwitchRootContext': { class: 'SwitchRootState', newPattern: 'SwitchRootState.ctx' }, 'TabsRootContext': { class: 'TabsRootState', newPattern: 'TabsRootState.ctx' }, 'TagsInputRootContext': { class: 'TagsInputRootState', newPattern: 'TagsInputRootState.ctx' }, 'TagsInputTagContext': { class: 'TagsInputTagState', newPattern: 'TagsInputTagState.ctx' }, 'TimeFieldRootContext': { class: 'TimeFieldRootState', newPattern: 'TimeFieldRootState.ctx' }, 'TimeRangeFieldRootContext': { class: 'TimeRangeFieldRootState', newPattern: 'TimeRangeFieldRootState.ctx' }, 'ToastRootContext': { class: 'ToastRootState', newPattern: 'ToastRootState.ctx' }, 'ToggleGroupRootContext': { class: 'ToggleGroupRootState', newPattern: 'ToggleGroupRootState.ctx' }, 'ToolbarGroupContext': { class: 'ToolbarGroupState', newPattern: 'ToolbarGroupState.ctx' }, 'ToolbarRootContext': { class: 'ToolbarRootState', newPattern: 'ToolbarRootState.ctx' }, 'TooltipProviderContext': { class: 'TooltipProviderState', newPattern: 'TooltipProviderState.ctx' }, 'TooltipRootContext': { class: 'TooltipRootState', newPattern: 'TooltipRootState.ctx' }, 'FloatingTooltipRootContext': { class: 'FloatingRootState', newPattern: 'FloatingRootState.ctx' }, 'FloatingContentContext': { class: 'FloatingContentState', newPattern: 'FloatingContentState.ctx' }, }; function findAllFiles(dir: string): string[] { const files: string[] = []; const entries = readdirSync(dir, { withFileTypes: true }); for (const entry of entries) { const fullPath = join(dir, entry.name); if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') { files.push(...findAllFiles(fullPath)); } else if (entry.isFile() && (entry.name.endsWith('.svelte') || entry.name.endsWith('.ts'))) { files.push(fullPath); } } return files; } function fixFile(filePath: string): boolean { const content = readFileSync(filePath, 'utf-8'); let modified = content; // Para cada contexto en el mapa for (const [oldContext, info] of Object.entries(contextMap)) { // 1. Eliminar el contexto de los imports si no se usa elsewhere en el archivo const importRegex = new RegExp(`,?\\s*${oldContext}\\s*,?\\s*`, 'g'); const hasOldImport = new RegExp(`\\b${oldContext}\\b`).test(content); if (!hasOldImport) continue; // 2. Reemplazar referencias al contexto con el nuevo patrón modified = modified.replace(new RegExp(`\\b${oldContext}\\.set\\(`, 'g'), `${info.newPattern}.set(`); modified = modified.replace(new RegExp(`\\b${oldContext}\\.get\\(`, 'g'), `${info.newPattern}.get(`); modified = modified.replace(new RegExp(`\\b${oldContext}\\.getOr\\(`, 'g'), `${info.newPattern}.getOr(`); } if (modified !== content) { writeFileSync(filePath, modified, 'utf-8'); return true; } return false; } const files = findAllFiles(terraDir); let modified = 0; console.log('🔧 Actualizando referencias a contextos...\n'); for (const file of files) { if (fixFile(file)) { modified++; const relPath = file.replace(/.*src\\/, '').replace(/.*src\//, ''); console.log(` ✅ ${relPath}`); } } console.log(`\n📊 Resumen:`); console.log(` Modificados: ${modified}`); console.log(` Total procesados: ${files.length}`);