假设我有一种看起来像的语言
print "Hello World"
转换为
var $__Helpers = {
print: function(s) {
if (typeof s != 'string')
throw new TypeError('String expected');
console.log(s);
}
};
$__Helpers.print("Hello World");
如果这种语言的用户
print 5
$__Helpers.print
说“预期字符串”会抛出 TypeError 。我希望开发人员工具将该print 5
行显示为此错误的原始调用。我知道如何让我的源映射显示一个看起来像的调用堆栈
transpiled_script.js:2
original_script.os:1
其中transpiled_script.js:2
是$__Helpers.print
函数调用original_script.os:1
的脚本和行号,是调用的脚本和行号print 5
。我想让开发工具忽略对顶部的调用transpiled_script.js
(这只是我的转译器的一个实现细节),只显示来自原始脚本的调用(这是他们应该在自己的脚本中调试的部分)。
我显然不能简单地映射transpiled_script.js:2
到,original_script.os:1
因为可能会多次调用print
inside original_script.os
,所以这不是一对一的关系。
有没有办法做到这一点?
(我正在使用 escodegen 生成我的源代码和源映射(escodegen 使用 Node mozilla/source-map 模块),因此有一种方法可以告诉 escodegen 或 mozilla/source-map 这样做是理想的,但我可以覆盖escodegen 的输出,如果那是不可能的。)