Prevent native Error class hi-jacking in FS errors
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
Version
v16.9.0
Platform
Linux vagrant-docker 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux
Subsystem
fs
What steps will reproduce the bug?
In the current state of the promises section of the native fs module, when an error occurs, the native type Error is hi-jacked and a code property is being added to the error object.
This can easily be reproduced with the following code:
import { promises as FileSystem } from "fs";
try
{
FileSystem.stat("/a/path/leading/to/nothing");
}
catch (error)
{
console.log(Object.getPrototypeOf(error); // Will display the native class "Error"
console.log(Object.getOwnPropertyDescriptors(error); // Will display the added code property that isn't native to Error.
}
How often does it reproduce? Is there a required condition?
No required conditions outside of the use of the fs native module.
What is the expected behavior?
This isn't a bug per-se but is a bad practice. A custom error of type FileSystemError should be thrown instead of hi-jacking the Error class to dynamically add a property to the object.
This behavior leads to problematic linting and testing with super-sets such as TypeScript or Eslint. Since code is not a native property of Error and dynamic property setting is often considered bad practice, it leads to situations where handling those specific issues requires extra effort to circumvent this design.
What do you see instead?
No response
Additional information
Ideally a custom FileSystemError should be created such as (Typescript example for types clarity):
class FileSystemError extends Error
{
public code: string; // Ideally should be an enum listing all the possible values.
}
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza siguiendo el recorrido nativo de fs promises que utiliza FileSystem.stat cuando informa de que falta una ruta; después, inspecciona cómo el objeto Error actual recibe su propiedad code. El trabajo estará terminado cuando los errores utilicen un tipo de error de sistema de archivos dedicado con la información de code necesaria, y haya pruebas que cubran el comportamiento de la API de promises.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript
- Área
- backend, operating-systems
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100