La API de File System Access y la API de Origin Private File System permiten que los desarrolladores accedan a los archivos y directorios del dispositivo del usuario. El primer archivo permite que los desarrolladores lean y escriban en el sistema de archivos normal visible para el usuario, mientras que el segundo abre un sistema de archivos especial oculto del usuario que es privado para el origen de cada sitio y que viene con ciertas ventajas de rendimiento. La forma en que los desarrolladores interactúan con archivos y directorios en ambos casos es a través de objetos FileSystemHandle
, más concretamente, FileSystemFileHandle
para archivos y FileSystemDirectoryHandle
para directorios. Hasta ahora, para recibir información sobre cambios en un archivo o directorio en cualquiera de los sistemas de archivos, se requería algún tipo de sondeo y comparación con la marca de tiempo lastModified
o incluso el contenido del archivo.
La API de File System Observer, en prueba de origen de Chrome 129, cambia esta situación y permite que los desarrolladores reciban alertas automáticas cuando se producen cambios. En esta guía, se explica cómo funciona y cómo probarla.
Casos de uso
Usa la API de File System Observer en apps que necesiten ser informadas de posibles cambios en el sistema de archivos en cuanto se produzcan.
- Son entornos de desarrollo integrados (IDE) basados en la Web que muestran una representación del árbol del sistema de archivos de un proyecto.
- Las apps que sincronizan cambios del sistema de archivos con un servidor Por ejemplo, un archivo de base de datos SQLite.
- Apps que deben notificar al subproceso principal sobre los cambios en el sistema de archivos desde un trabajador o desde otra pestaña.
- Apps que observan un directorio de recursos, por ejemplo, para optimizar imágenes automáticamente
Cómo usar la API de File System Observer
Detección de funciones
Para ver si la API de File System Observer es compatible, ejecuta una prueba de funciones como en el siguiente ejemplo.
if ('FileSystemObserver' in self) {
// The File System Observer API is supported.
}
Inicializa un observador del sistema de archivos
Inicializa un observador del sistema de archivos llamando a new FileSystemObserver()
y proporciónale una función callback
como argumento.
const observer = new FileSystemObserver(callback);
Comienza a observar un archivo o directorio
Para comenzar a observar un archivo o directorio, llama al método asíncrono observe()
de la instancia FileSystemObserver
. Proporciona este método el FileSystemHandle
del archivo o directorio seleccionado como argumento. Cuando observas un directorio, hay un argumento options
opcional que te permite elegir si deseas recibir información sobre los cambios en el directorio de manera recurrente (es decir, para el directorio en sí y para todos los subdirectorios y archivos contenidos). La opción predeterminada es solo observar el directorio en sí y los archivos contenidos directamente.
// Observe a file.
await observer.observe(fileHandle);
// Observe a directory.
await observer.observe(directoryHandle);
// Observe a directory recursively.
await observer.observe(directoryHandle, {recursive: true});
La función de devolución de llamada
Cuando se producen cambios en el sistema de archivos, se llama a una función de devolución de llamada con el cambio del sistema de archivos records
y observer
como sus argumentos. Puedes usar el argumento observer
para, por ejemplo, desconectar al observador (consulta Deja de observar el sistema de archivos) cuando se borren todos los archivos que te interesan.
const callback = (records, observer) => {
for (const record of records) {
console.log('Change detected', record);
}
};
El registro de cambios del sistema de archivos
Cada registro de cambio del sistema de archivos tiene la siguiente estructura. Todos los campos son de solo lectura.
root
(unFileSystemHandle
): Es el controlador que se pasa a la funciónFileSystemObserver.observe()
.changedHandle
(unFileSystemHandle
): Es el controlador afectado por el cambio del sistema de archivos.relativePathComponents
(unArray
): Es la ruta de acceso dechangedHandle
en relación con elroot
.type
(unString
): Es el tipo de cambio. Los siguientes tipos son posibles:"appeared"
: El archivo o directorio se creó o se movió aroot
."disappeared"
: El archivo o directorio se borró o se movió fuera deroot
."modified"
: Se modificó el archivo o directorio."moved"
: El archivo o directorio se movió dentro deroot
."unknown"
: Indica que se perdieron cero o más eventos. Los desarrolladores deben sondear el directorio observado en respuesta a esto."errored"
: La observación ya no es válida. En este caso, es posible que quieras dejar de observar el sistema de archivos.
relativePathMovedFrom
(unArray
, opcional): Es la ubicación anterior de un controlador que se movió. Solo está disponible cuandotype
es"moved"
.
Cómo dejar de observar un archivo o directorio
Para dejar de observar un FileSystemHandle
, llama al método unobserve()
y pásale el controlador como argumento.
observer.unobserve(fileHandle);
Dejar de observar el sistema de archivos
Para dejar de observar el sistema de archivos, desconecta la instancia FileSystemObserver
de la siguiente manera.
observer.disconnect();
Prueba la API
Para probar la API de File System Observer de forma local, configura la marca #file-system-observer
en about:flags
. Para probar la API con usuarios reales, regístrate en la prueba de origen y sigue las instrucciones que se indican en la guía Pruebas de origen de Chrome. La prueba de origen se realizará desde Chrome 129 (11 de septiembre de 2024) a Chrome 134 (26 de febrero de 2025).
Demostración
Puedes ver la API de File System Observer en acción en la demostración incorporada. Consulta el código fuente o remezcla el código de demostración en Glitch. La demostración crea, borra o modifica archivos de forma aleatoria en un directorio observado y registra su actividad en la parte superior de la ventana de la app. Luego, registra los cambios a medida que ocurren en la parte inferior de la ventana de la app. Si leíste esto en un navegador que no es compatible con la API de File System Observer, consulta una captura de pantalla de la demostración.
Comentarios
Si tienes comentarios sobre la forma de la API de File System Observer, comenta el problema n.o 123 en el repositorio WHATWG/fs.
Vínculos relevantes
- Explicación
- Revisión de TAG
- Posición de los estándares de Mozilla
- Posición de los estándares de WebKit
- ChromeStatus
- Error de Chromium
Agradecimientos
Daseul Lee, Nathan Memmott, Etienne Noël y Rachel Andrew revisaron este documento.