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.
121 lines
3.6 KiB
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}`);
|