You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
8.3 KiB
136 lines
8.3 KiB
|
6 months ago
|
/**
|
||
|
|
* 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<string, { class: string; newPattern: string }> = {
|
||
|
|
'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}`);
|