From:  Ron Buckton <Ron.Buckton@microsoft.com>
Date:  03 Feb 2015 03:57:06 Hong Kong Time
Newsgroup:  news.mozilla.org/mozilla.dev.js-sourcemap
Subject:  

Source Maps, Debuggers, and Generated Code

NNTP-Posting-Host:  63.245.216.66

Many transpilers today (TypeScript, Traceur, 6to5, etc.) often need to emit generated code, that sometimes does not have a one-to-one mapping with the original source. One of the most notorious examples is the down-level transpile for ES6 generators, which often introduces multiple statements that correspond to a single statement or expression in the original source. TypeScript either elides mapping information for helper functions such as the __extends helper in some cases and in others maps the multiple steps to a single source span, such as how it handles a rest parameter. Traceur adds the generated code to the "sourcesContent" array in the source map.

In addition, various debuggers with source-map support handle generated content differently. In the Chrome Dev Tools and in Visual Studio, any step in the debugger that is not mapped to a source span results in stepping through the generated javascript file until a mapping is encountered, while in the IE F12 tools the debugger makes every effort to keep the source content visible and highlights the last source span for each step in the generated output.

Is there a standard approach to how this content should be mapped, or how stepping should be handled? I'm currently investigating whether it makes sense to propose an extension to the source map specification to classify a range in the generated output as "debugger hidden", so that a debugger will always step through any statements within this range. Alternatively, I'm interested in whether it would make sense for debuggers to treat generated lines with no mappings as "debugger hidden", as well as step through multiple operations if they all map to the same source location.

Best regards,
Ron