VS Code tiene un soporte bastante bueno para ejecutar y depurar JavaScript.
El JavaScript que me gustaría depurar de esta manera normalmente se ejecuta en Jint, que es un intérprete de JS escrito completamente en C#. Algunas de las virtudes de Jint para esta aplicación incluyen la portabilidad, la limitación detallada de JS alojado y la capacidad de inyectar objetos del proceso del host dotnet, algo que he aprovechado para implementar el sandboxing: no hay acceso directo a los archivos, sino que proporciona un objeto WorkingFolder inyectado. acceso a cualquier archivo en una carpeta de trabajo predeterminada. También se inyecta un gráfico de parámetros arbitrario, en forma de cadena JSON.
El código JS depende de estos objetos inyectados.
Si ejecuto este código usando el nodo, se pueden falsificar cadenas y objetos inyectados inyectando algo de JS al principio. Podría esconder todo esto detrás de un solo require pero me gustaría hacerlo completamente transparente. Supongo que podría pensar en ello como una inyección de dependencia en el espacio de nombres global.
La pregunta entonces es cómo se podría hacer esto.
He considerado abordarlo desde la otra dirección y crear un host Jint. Eso resolvería fácilmente el problema de la inyección, pero luego tendría que implementar todo el soporte del depurador. Jint tiene soporte de depuración, pero me comuniqué con el desarrollador y no está listo para el horario de máxima audiencia.
Podría secuestrar el proceso de inicio y anteponer algo de código, tal vez crear un nuevo archivo con el requisito JS antepuesto y ejecutar ese archivo . O tal vez esto es algo que admite el nodo (o incluso el código VS). No lo sabría, por eso pregunto si alguien ha hecho algo así con esta cadena de herramientas.
Conceptualmente, esto podría verse como paralelo a la ejecución de TypeScript. Fuente en un extremo, se produce la transformación, JS sale por el otro extremo y luego se inicia con un mapa de regreso a la fuente para que los puntos de interrupción puedan funcionar en la fuente original.