Commit graph

12 commits

Author SHA1 Message Date
841fe89ea7 fix: Corregir llamada a writeAll para Zig 0.16
- Reemplazar writeAll (inexistente) por múltiples writeStreamingAll.

Co-Authored-By: Gemini <noreply@google.com>
2026-01-18 17:53:14 +01:00
c761cb838d build: Migrar a Zig 0.16
- Propagar io: std.Io en metodos de ConfigManager, load y save.
- Actualizar FileWatcher para usar std.Io.Dir.statFile y manejar nuevo Io.Timestamp (i96).
- Implementar helpers currentTimestamp y currentMilliTimestamp usando std.posix.clock_gettime.
- Actualizar build.zig.zon a 0.16.0.

Co-Authored-By: Gemini <noreply@google.com>
2026-01-18 00:54:32 +01:00
3d30b1ed24 fix(config): Free previous string value before setting new one
- Added freeString checks before dupeString in setFieldByDef
- Prevents memory leak during hot-reload when same field is set multiple times
- Works with Config structs that implement freeString method
2025-12-25 22:53:05 +01:00
R.Eugenio
da50ebfc75 docs: Documentar setSilent() y descripciones extendidas v0.2.4
- setSilent(): carga masiva sin disparar observers
- Formato extendido auto_validate: opcion=descripcion
- Genera comentarios multilínea en archivo config
- 100% compatible hacia atrás

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 00:33:00 +01:00
R.Eugenio
3dd835eb51 feat: setSilent() + opciones válidas en comentarios config
- setSilent(): Establece valor sin disparar observers
  Útil para carga masiva desde BD (evita writes innecesarios)
- save(): Muestra opciones válidas en comentarios
  Ejemplo: # Modo validación NIF [Estricto,Permisivo,Desactivado]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 23:49:47 +01:00
8f4d131e46 fix: Parsing comentarios - aceptar 1 espacio antes de #
El parser de líneas de configuración requería 2 espacios antes del
comentario (`  #`), pero el formato estándar usa 1 espacio (` #`).

Esto causaba que valores como "GrisBorde # color placeholder" no
se parsearan correctamente, incluyendo el comentario en el valor.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 12:48:09 +01:00
957767d865 fix: validateIntRange/FloatRange soportan rangos negativos
Bug: "-100-100" se parseaba como ["", "100", "100"] con splitScalar
Fix: Buscar el separador '-' que NO está al inicio del string

Ejemplos que ahora funcionan:
- "-100-100" → min=-100, max=100
- "-50-50" → min=-50, max=50
- "0-100" → min=0, max=100 (sin cambio)

Test añadido para rangos negativos.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 17:35:25 +01:00
0ef5efd8d8 feat: initDeferred() para control manual de archivo
- Nueva función initDeferred() que NO carga/crea archivo automáticamente
- Útil cuando se necesita verificar BD antes de decidir qué cargar
- init() mantiene comportamiento original (loadOrCreate automático)
- Permite arquitectura 3 fuentes: Archivo > BD > Defaults

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 17:30:16 +01:00
ef45ce6934 feat: Add FileWatcher and loadFromString
- FileWatcher: Observa archivo para detectar cambios via mtime
  - Intervalo configurable entre verificaciones
  - reset() y updateMtime() para control manual
- loadFromString(): Carga config desde string (para defaults embebidos)
- Tests para ambas funcionalidades

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 12:56:51 +01:00
4ec8667853 fix: duplicar strings al cargar config para evitar dangling pointers
Problema: Al recargar config, los strings asignados apuntaban al buffer
de contenido del archivo que se liberaba con defer al final de load().
Esto causaba segfaults al acceder a los valores después.

Solución: Usar dupeString() o allocator.dupe() para crear copias
independientes de los strings antes de asignarlos a la config.

Afecta tipos .string, .string_array y .color (cuando el campo es []const u8).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 11:33:35 +01:00
91e5133e13 feat: ConfigManager - gestor autónomo de configuración
Añade ConfigManager que maneja automáticamente:
- Carga/creación de archivo config (loadOrCreate)
- Auto-guardado en deinit si hay cambios pendientes
- Sistema de observers con contexto para sincronización externa

Cambios:
- ConfigManager(variables, ConfigType, app_name) type
- Observer con contexto: fn(change, config, ctx) void
- addObserver(callback, context) para registrar listeners
- Métodos: get, set, getConfig, getConfigMut, markDirty, isDirty

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 13:29:29 +01:00
15c7f7357e feat: zcatconfig v0.1.0 - Sistema de configuracion declarativo
Libreria para gestion de configuracion con:
- Definicion declarativa de variables (ConfigVariable)
- Engine generico con comptime (inline for + @field)
- Persistencia a archivo texto legible
- Validacion de valores (rangos, tipos)
- Soporte: boolean, integer, float, string, color

Extraido y generalizado de zsimifactu/src/config/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 12:29:59 +01:00