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.
svelte-kit-vice/scripts/add-contracts-imports.ts

121 lines
3.6 KiB

/**
* Script para agregar assertDataContract a todos los componentes de Terra
*/
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
import { resolve, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Archivos a procesar (rutas relativas al proyecto)
const files = [
'accordion/accordion.svelte.ts',
'alert-dialog/alert-dialog.svelte.ts',
'aspect-ratio/aspect-ratio.svelte.ts',
'avatar/avatar.svelte.ts',
'calendar/calendar.svelte.ts',
'collapsible/collapsible.svelte.ts',
'color-picker/color-picker.svelte.ts',
'command/command.svelte.ts',
'date-field/date-field.svelte.ts',
'date-picker/date-picker.svelte.ts',
'date-range-field/date-range-field.svelte.ts',
'date-range-picker/date-range-picker.svelte.ts',
'dialog/dialog.svelte.ts',
'drawer/drawer.svelte.ts',
'dropdown-menu/dropdown-menu.svelte.ts',
'editable/editable.svelte.ts',
'file-upload/file-upload.svelte.ts',
'form/form.svelte.ts',
'link-preview/link-preview.svelte.ts',
'menu/menu.svelte.ts',
'menubar/menubar.svelte.ts',
'meter/meter.svelte.ts',
'number-field/number-field.svelte.ts',
'pagination/pagination.svelte.ts',
'pin-input/pin-input.svelte.ts',
'popover/popover.svelte.ts',
'progress/progress.svelte.ts',
'range-calendar/range-calendar.svelte.ts',
'rating-group/rating-group.svelte.ts',
'scroll-area/scroll-area.svelte.ts',
'select/select.svelte.ts',
'separator/separator.svelte.ts',
'slider/slider.svelte.ts',
'spinner/spinner.svelte.ts',
'splitter/splitter.svelte.ts',
'stepper/stepper.svelte.ts',
'tabs/tabs.svelte.ts',
'tags-input/tags-input.svelte.ts',
'thumb/thumb.svelte.ts',
'time-field/time-field.svelte.ts',
'time-range-field/time-range-field.svelte.ts',
'toggle-group/toggle-group.svelte.ts',
'toolbar/toolbar.svelte.ts',
'tooltip/tooltip.svelte.ts',
'virtual-list/virtual-list.svelte.ts'
].map((f) => resolve(__dirname, '../src/uix/terra', f));
let modified = 0;
let skipped = 0;
let notFound = 0;
for (const file of files) {
try {
if (!existsSync(file)) {
notFound++;
continue;
}
let content = readFileSync(file, 'utf-8');
const original = content;
// Ya tiene el import
if (content.includes('assertDataContract')) {
skipped++;
continue;
}
// Buscar la última línea de import desde utils/attrs o ../utils/attrs
const attrsImportMatch = content.match(/from ["'].*?\/utils\/attrs["']/);
if (!attrsImportMatch) {
console.log(`⚠️ No se encontró import de attrs en: ${file}`);
skipped++;
continue;
}
const lastAttrsLineEnd = content.indexOf(
'\n',
(attrsImportMatch.index ?? 0) + attrsImportMatch[0].length
);
if (lastAttrsLineEnd === -1) {
skipped++;
continue;
}
// Insertar el nuevo import después del import de attrs
const importStatement = `\nimport { assertDataContract } from "$terra/utils/contracts";`;
content =
content.slice(0, lastAttrsLineEnd + 1) +
importStatement +
content.slice(lastAttrsLineEnd + 1);
if (content !== original) {
writeFileSync(file, content, 'utf-8');
modified++;
const componentName = file.replace(/.*src\\uix\\terra\\/, '').replace(/\.svelte\.ts$/, '');
console.log(`✅ ${componentName}`);
}
} catch (e) {
console.log(`❌ Error procesando ${file}:`, e instanceof Error ? e.message : e);
}
}
console.log(`\n📊 Resumen:`);
console.log(` Modificados: ${modified}`);
console.log(` Skippeados (ya tenían import): ${skipped}`);
console.log(` No encontrados: ${notFound}`);
console.log(` Total procesados: ${modified + skipped + notFound}`);

Powered by TurnKey Linux.