Manejo de archivos en Node
El pipeline
Sección titulada «El pipeline»bytes → signature check → plain XML: decode UTF-8 directly │ └── zip: find model.xml entry → stream-decode → CRC-32 check → decode UTF-8extractArchiModelXml
acepta bytes crudos y devuelve el texto XML del modelo para ambas formas
de archivo:
import { readFile } from 'node:fs/promises';import { extractArchiModelXml } from '@cda/archi-semantic-core/archive';
const bytes = await readFile('Model.archimate'); // binary read — never text-decode firstconst xml = extractArchiModelXml(bytes);Detección
Sección titulada «Detección»La función inspecciona la firma del archivo:
- PK (zip) → ruta de archivo: localiza
model.xmlen el directorio central, lo infla, verifica el CRC-32 y decodifica UTF-8. - cualquier otra cosa → ruta de XML plano: decodifica los bytes directamente como UTF-8.
Métodos de compresión
Sección titulada «Métodos de compresión»Solo se admiten entradas Stored (sin comprimir) y Deflate — son los
únicos dos métodos que Archi escribe jamás. Cualquier otro método lanza una
excepción. El archivo .archimate completo nunca necesita ser inflado: solo
se lee la entrada model.xml, por lo que el costo de memoria se mantiene
proporcional al tamaño decodificado del modelo (consulta
Trabajo con modelos grandes).
Taxonomía de errores
Sección titulada «Taxonomía de errores»| Condición | Comportamiento |
|---|---|
La entrada parece un zip pero no tiene una entrada model.xml | lanza una excepción |
| La entrada usa un método distinto de Stored/Deflate | lanza una excepción |
| Desajuste de CRC-32 en la entrada decodificada | lanza una excepción |
| Estructura zip truncada o corrupta | lanza una excepción |
Trabajo con imágenes
Sección titulada «Trabajo con imágenes»extractArchiModelXml devuelve solo XML — los bytes de las imágenes
permanecen en el archivo. ArchiProfile.imagePath (p. ej. "images/abc123.png")
y las rutas de imagen de DiagramModelImageProvider son punteros: para
extraer un binario específico, abre el archivo tú mismo y lee la entrada
images/ correspondiente.
Límite de plataforma
Sección titulada «Límite de plataforma»La ruta de archivo usa el node:zlib integrado de Node — esta es la razón
por la que la función vive en el subpath /archive y no forma parte del
entrypoint raíz seguro para navegadores. Si necesitas manejo de archivos del
lado del navegador, eso es un asunto de otro paquete, no de este.