Camofox Browser
Código de Camofox: ventanas de instantánea y límites de extracción determinista
Inspecciona paginación por caracteres, navegación preservada, x-ref y conversión numérica mediante dos auxiliares pequeños probados directamente.
Qué aprenderás
- Los offsets cuentan unidades de cadena JavaScript, no tokens.
- x-ref lee nombres y admite un subconjunto limitado de esquema.
- La conversión puede cambiar el significado de números formateados.
Antes de empezar
- HTTP y JSON básicos
- Servicio aislado y página propia o permitida
Explica la frontera real del servicio y verifica la muestra de observación o ciclo propuesta.
Conclusiones clave
- Los offsets cuentan unidades de cadena JavaScript, no tokens.
- x-ref lee nombres y admite un subconjunto limitado de esquema.
- La conversión puede cambiar el significado de números formateados.
Paginar una instantánea es recortar una cadena
lib/snapshot.js utiliza un límite nominal de 80000 caracteres y conserva los últimos 5000 para navegación. Tras reservar espacio de marcador, el contenido dispone de 74800. Las entradas grandes devuelven ventana, cola y metadatos; las pequeñas pasan intactas. Son unidades de longitud de JavaScript, no bytes UTF-8 ni tokens reales.
Una llamada aislada al auxiliar con 100000 caracteres ASCII devolvió totalChars 100000, nextOffset 74800 y hasMore true. Su texto midió 79915 caracteres. Es una observación de función pura, no un benchmark del navegador. Ventanas posteriores pueden solaparse con la cola añadida; concatenar todas las respuestas no garantiza reconstruir un original sin duplicados.
x-ref asocia campos con nombres, no con significado arbitrario
lib/extract.js valida una forma limitada de esquema y busca cada x-ref en el name del mapa de referencias. Una referencia opcional ausente produce null; un valor obligatorio ausente lanza un error. La ruta exige un mapa no vacío e indica que falta una instantánea cuando no existe. No es un modelo que deduzca qué campo pretendías.
El validador comprueba objeto superior, properties y un conjunto de tipos permitidos. No implementa JSON Schema completo: su terminología no implica validación recursiva, restricciones arbitrarias ni arrays. Incluso una extracción determinista necesita validación de aplicación para el campo, unidad y revisión documental previstos.
La conversión numérica exige pruebas de formato regional
La conversión integer inspeccionada elimina todo salvo dígitos y signos menos antes de analizar. Con el nombre 12.5 devolvió 125, no doce redondeado o truncado. La conversión number conserva puntos y elimina comas: €1.234,56 produjo 1.23456. Ambas llamadas puras se ejecutaron durante la revisión y muestran la necesidad de reglas explícitas para cantidades con formato.
El ejemplo reproduce únicamente esas conversiones, no navegador, manejador HTTP ni sesión completa. Cuando importan región y unidades, extrae primero texto bruto, aplica un parser elegido deliberadamente y rechaza entradas ambiguas. Conserva texto y valor normalizado juntos para que la revisión muestre exactamente qué información cambió.
Pasos de implementación
- 1
Lee presupuesto principal y cola de windowSnapshot.
- 2
Compara cadenas pequeñas, grandes y multibyte.
- 3
Comprueba null opcional y error obligatorio.
- 4
Conserva texto numérico y valida normalización aparte.
Ejemplo para copiar
// Conversión aislada, no una sesión de navegador.
const integer = raw => Number.parseInt(raw.replace(/[^0-9-]/g, ""), 10);
const number = raw => Number.parseFloat(raw.replace(/[^0-9.eE+-]/g, ""));
console.log(integer("12.5"));
console.log(number("€1.234,56"));Preguntas frecuentes
¿El límite de instantánea es presupuesto de tokens?
No. El auxiliar usa longitud de cadena JavaScript; tokenización y bytes UTF-8 deben medirse aparte.
¿Determinista significa número correcto?
No. Los ejemplos probados alteran valores formateados; conserva texto y valida región y unidades.
Fuentes
- README.mdFuente verificada 2026-09-08
- package.jsonFuente verificada 2026-09-08
- DockerfileFuente verificada 2026-09-08
- lib/auth.jsFuente verificada 2026-09-08
- lib/snapshot.jsFuente verificada 2026-09-08
- lib/extract.jsFuente verificada 2026-09-08
- lib/config.jsFuente verificada 2026-09-08
- lib/reporter.jsFuente verificada 2026-09-08
- lib/page-lease.jsFuente verificada 2026-09-08
- server.jsFuente verificada 2026-09-08
- tests/unit/snapshot.test.jsFuente verificada 2026-09-08
- tests/unit/auth.test.jsFuente verificada 2026-09-08