@vunojs/shared

v0.0.30

Published

Shared utilities for Vuno packages. A contract between Vuno packages, not an application API.

Readme

@vunojs/shared

Utilidades que comparten los paquetes del framework. Es la base del grafo de dependencias y no contiene reglas de negocio de una aplicación.

Es un contrato entre paquetes de Vuno, no una API para aplicaciones. Llega como dependencia transitiva de @vunojs/core, @vunojs/auth, @vunojs/node, @vunojs/vite y @vunojs/ui, y solo exporta lo que esos paquetes usan: una utilidad que ningún paquete de Vuno necesita sale del paquete. Se publica con la misma versión que el resto, pero sus exportaciones pueden cambiar o desaparecer en cualquier versión sin seguir semver. Una aplicación que lo importe directamente lo declara en su package.json y acepta ese riesgo.

No lo confundas con shared/ en la raíz de una aplicación Vuno: esa carpeta es código propio del consumidor y puede importarse mediante #shared/*; este es un paquete del monorepo.

Entradas

| Import | Entorno y responsabilidad | | ---------------------------- | ------------------------------------------------------------------------------ | | @vunojs/shared | Cookies, escapado de HTML y orden de strings. | | @vunojs/shared/object | Operaciones tipadas y superficiales sobre objetos. | | @vunojs/shared/file-system | Comprobaciones de archivos exclusivas de Node.js. | | @vunojs/shared/pending | Contador de operaciones pendientes que alimenta el indicador de carga de core. |

No uses imports profundos desde src o dist: lo que no sale de estas cuatro entradas no forma parte del contrato.

Entrada principal

  • escapeHtml escapa texto para insertarlo en HTML generado por el framework.
  • compareCodeUnits ordena strings de forma determinista por unidades de código UTF-16.
  • decodeCookieValue decodifica valores de cookie sin convertir percent-encoding inválido en una excepción.
  • parseCookieHeader convierte un header Cookie o document.cookie en un diccionario plano. Las aplicaciones lo reciben reexportado desde @vunojs/auth.
import { escapeHtml, parseCookieHeader } from '@vunojs/shared'

const cookies = parseCookieHeader('theme=dark; locale=es')
const safeTitle = escapeHtml('<Vuno>')

parseCookieHeader analiza el header; no verifica firmas ni permisos. escapeHtml sirve para texto insertado en HTML, no para construir URLs, SQL o JavaScript.

Objetos

@vunojs/shared/object expone objectKeys, objectEntries, fromEntries, hasOwn, isRecord, isPlainObject, pick, omit, compactObject y mapValues. Siguen la semántica de las funciones nativas equivalentes y conservan los tipos del objeto:

import { objectKeys, pick } from '@vunojs/shared/object'

const config = { host: 'localhost', port: 3000 }
const keys = objectKeys(config) // ('host' | 'port')[]
const onlyPort = pick(config, ['port']) // { port: number }

isRecord acepta cualquier objeto no nulo que no sea un array; isPlainObject exige además un prototipo Object.prototype o null.

Filesystem

El subpath @vunojs/shared/file-system contiene utilidades exclusivas de Node.js:

  • isFile indica si una ruta apunta a un archivo, devuelve false cuando no existe y conserva los demás errores del filesystem.

No importes @vunojs/shared/file-system desde código de navegador.