Sobre el proyecto

svgdom es una implementación de DOM sencilla diseñada para que SVG.js se ejecute sin interfaz gráfica en Node.js. Aunque se creó originalmente con ese propósito, ahora es más completa en cuanto a funciones y puede ser utilizada por cualquiera que necesite un DOM de XML, SVG o HTML. Los usos típicos incluyen generar archivos SVG en un servidor, probar código SVG sin un navegador y crear herramientas de canalización de recursos que inspeccionan o transforman la geometría SVG. Para comenzar con SVG.js v3.x es necesario instalar @svgdotjs/svg.js y svgdom. Se importa createSVGWindow desde svgdom y SVG junto con registerWindow desde @svgdotjs/svg.js. createSVGWindow devuelve una ventana con un documento y un nodo raíz SVG. Después de registrar la ventana y el documento, se crea un lienzo a partir de document.documentElement y se usa SVG.js con normalidad, por ejemplo dibujando un rectángulo, rellenándolo, moviéndolo y luego generando el SVG como cadena o mediante outerHTML. Además de SVG, svgdom puede crear una ventana HTML con createHTMLWindow, o una ventana XML genérica con createWindow, pasando un URI de espacio de nombres y un nodo raíz, como MathML. En Node.js 22.13 o posterior, svgdom puede cargarse directamente con require como módulo CommonJS. El proyecto documenta desviaciones intencionales del DOM. Prioriza una API pequeña y conveniente para el uso de SVG sin interfaz gráfica por encima de la conformidad completa con el DOM del navegador. document.createElement hereda el espacio de nombres del documento, por lo que createSVGDocument().createElement('rect') crea un SVGRectElement en el espacio de nombres SVG, a diferencia de un DOM XML de navegador donde createElement crea un elemento sin espacio de nombres y se requiere createElementNS. El comportamiento HTML se infiere del espacio de nombres del documento: un documento con el espacio de nombres XHTML recibe el uso de mayúsculas y minúsculas de nombres HTML, selectores de tipo HTML que no distinguen mayúsculas de minúsculas, serialización de elementos vacíos HTML y la restricción HTML sobre CDATA. svgdom no implementa actualmente el algoritmo de análisis HTML tolerante; HTMLParser e innerHTML usan un analizador XML estricto, por lo que el marcado debe estar bien formado y no se admiten la recuperación de etiquetas sueltas, las etiquetas de cierre opcionales ni comportamientos similares. Para los cuadros delimitadores de texto, primero deben cargarse las fuentes. svgdom carga Open Sans-Regular de forma predeterminada cuando no se encuentra ningún archivo de fuente para la fuente especificada. Las opciones de configuración permiten establecer un directorio de fuentes, asignar familias de fuentes a archivos y precargar fuentes para evitar retrasos de carga en el primer uso. Las mismas funciones pueden importarse directamente. Entre las limitaciones conocidas se incluye que las propiedades de fuente como negrita y cursiva solo se admiten cuando la fuente correspondiente se carga explícitamente, por ejemplo asignando Arial-italic a arial_italic.ttf. querySelector admite un conjunto limitado de pseudoclases: empty, first-child, last-child, nth-child, nth-last-child, first-of-type, last-of-type, nth-of-type, nth-last-of-type, only-child, only-of-type, has, is, root, not, matches, scope y where. Las pseudoclases nth-child y nth-last-child también admiten la sintaxis del selector of. Los valores de atributo que contienen un corchete de cierre no se analizan correctamente actualmente en los selectores, incluso cuando están entre comillas. svgdom puede usarse en otros proyectos, aunque algunas funciones no son necesarias para SVG.js y por lo tanto no están implementadas ni probadas. El README señala que childNodes es un array. El proyecto acepta issues y pull requests para las funciones necesarias y ofrece enlaces de donación y patrocinio.