Estoy escribiendo un analizador de código. Mi analizador usa los ganchos JavaScriptParser de Webpack . Necesito generar un mensaje de error, pero el número de línea de node.loc está desactivado porque un cargador transformó el código fuente. Entonces quiero enviar el mensaje de error a través de un mapa fuente antes de registrarlo.
class FooPlugin { apply(compiler) { compiler.hooks.normalModuleFactory.tap("FooPlugin", factory => { factory.hooks.parser .for('javascript/auto') .tap("FooPlugin", parser => { parser.hooks.call.for("foo").tap("FooPlugin", expr => { const map = getSourceMapSomehow(); /* ??? */ const originalLine = map.originalPositionFor(expr.loc.start).line; console.log("foo() call found at line " + originalLine); }); }); }); } } No sé cómo completar getSourceMapSomehow() en el ejemplo anterior. ¿Cómo puedo obtener el mapa fuente para el módulo actual dentro de un gancho JavaScriptParser ?
Lo descubrí leyendo el código fuente de Webpack. La función que necesitaba era module.originalSource() .
const map = new SourceMapConsumer(parser.state.module.originalSource().map()); const originalLine = map.originalPositionFor(expr.loc.start).line; console.log("foo() call found at line " + originalLine);