Skip to content

Conversation

@andymedinadev
Copy link
Contributor

Mejora del serializador de consola y renderizado de valores complejos

Este PR mejora la serialización de valores enviados a la consola interna de codi.link, resolviendo múltiples problemas actuales cuando se intentan loguear funciones, Maps, Sets, fechas, expresiones regulares, objetos con símbolos o estructuras anidadas y circulares.

El nuevo sistema:

  • Elimina el error actual que muestra -43:18 Uncaught al loguear funciones.
  • Serializa correctamente funciones, mostrando nombre, tipo (async, generator) y su firma.
  • Muestra Maps, Sets, Dates, RegExp y objetos complejos con formato legible.
  • Detecta referencias circulares evitando romper el call stack.
  • Conserva símbolos como claves de objeto, mostrándolos correctamente.

Screenshot

screen

Cambios principales

1. Nuevo sistema de serialización (console-script.js)

  • Implementa una función encode() capaz de manejar:

    • Primitivos
    • Objetos simples
    • Arrays
    • Functions (con nombre, tipo y toString)
    • AsyncFunction y GeneratorFunction
    • Set, Map
    • Date → en formato legible (YYYY-MM-DD hh:mm:ss)
    • RegExp
    • Keys simbólicas (Symbol())
    • Casos circulares
  • Se reemplaza el envío raw a pushToConsole por el nuevo serialize(...).

2. Modificaciones en el formateador de valores (console.js)

  • Funciones renderizadas con:

    • Distinción visual (ƒ, async ƒ, ƒ*)
    • Firma limpia
    • Cuerpo comprimido {...} para evitar ver 300 líneas de código
  • Nuevo comportamiento para:

    • Map(size) { key => value }
    • Set(size) { items... }
    • Date con formato amigable
    • RegExp con color destacado
    • Unknowns con fallback seguro
    • Circulars como [Circular]

Cómo probar

function declarada(a, b) { return a + b }
const flecha = (x) => x * 2
async function ping(x) { return x }
function* gen() { yield 1 }

console.log(declarada)
console.log(flecha)
console.log(ping)

console.log(gen)
console.log(new Date("2025-11-26T18:30:00Z"))
console.log(/foo\d+/gi)
console.log(new Set([1, 2, 3]))
console.log(new Map([
  ["a", 1],
  ["b", 2],
]))

const circular = { x: 1 }
circular.self = circular
console.log(circular)

@midudev midudev merged commit 4827905 into midudev:main Nov 27, 2025
3 checks passed
@andymedinadev andymedinadev deleted the feature/console-serialization-improvements branch November 27, 2025 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants