You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When handling code that has already been transformed by tsc with a generated source map swc will generate an incorrect source map that points to the incorrect locations in the original file.
While the source code is not visible, you can still see the error: the generated source map does not seem to handle the newlines in the typescript source correctly and puts the first span from a newline on the previous code line:
This leads to further errors when implementing a transform plugin that replaces operators with functions. The source map for the generated code points to the incorrect line previous line.
The tests linked above pass, but that's because they're a slightly modified version of some tests we run in our own codebase which implement an internal plugin. When the plugin is enabled, which replaces certain operators with function calls, such as a += b => a = addAssign(a, b), the tests fail because the location of the generated code no longer matches that of the original source.
Here's an example of the correct source maps handling javascript code directly:
And the incorrect source code when handling a file that has previously been generated by tsc:
The source map visualizer doesn't show the code text, but you can see here that the replaced line is pointing to the previous newline (the end of the red span) instead of the line it really came from below (the green span)
Uh oh!
There was an error while loading. Please reload this page.
Describe the bug
When handling code that has already been transformed by
tsc
with a generated source mapswc
will generate an incorrect source map that points to the incorrect locations in the original file.Input code
src/typescript.ts
tsconfig.json
dist/typescript.js
dist/typescript.js.map
Config
Link to the code that reproduces this issue
https://gist.github.com/tough-griff/e300d5d8020d59b8d89ad94cf56175c3
SWC Info output
Expected behavior
Actual behavior
While the source code is not visible, you can still see the error: the generated source map does not seem to handle the newlines in the typescript source correctly and puts the first span from a newline on the previous code line:
This leads to further errors when implementing a transform plugin that replaces operators with functions. The source map for the generated code points to the incorrect line previous line.
Version
@swc/core: 1.11.24
Additional context
typescript example
See: https://evanw.github.io/source-map-visualization/#NDc0ACJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtsZXQgZm9vPSJmb28iO2xldCBib289ImJvbyI7bGV0IGJhcj0iYmFyIjtsZXQgYmF6PSJiYXoiO2Zvbys9YmFyO2V2YWwoImZ1bmN0aW9uIGhpKG5hbWUpIHsgcmV0dXJuIGBIaSAke25hbWV9YCB9IGhpKCd3b3JsZCEnKSIpO2NvbnN0IGtleT0ia2V5Ijtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBkeW5hbWljPSJzb21lZHluYW1pY2tleSI7c3dpdGNoKGtleSl7Y2FzZSBvYmpbZHluYW1pY106Y2FzZSBkeW5hbWljOmNhc2UibGl0ZXJhbCI6fWNvbnN0IGFiYz1ib28rYmF6O2NvbnN0IGRlZj1ib289PWJhejtjb25zdCBnaGk9Ym9vPT09YmF6O2NvbnN0IGprbD1ib28hPWJhejtjb25zdCBtbm89Ym9vIT09YmF6O2NvbnN0IHdvcmQ9IndvcmxkIjtjb25zdCBzdHI9YGhlbGxvICR7d29yZH1gOzgyMwB7InZlcnNpb24iOjMsImZpbGUiOiJ0eXBlc2NyaXB0LmpzIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXNjcmlwdC50cyJdLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOltdLCJtYXBwaW5ncyI6InNFQUlBLElBQUksR0FBRyxDQUFHLEtBQUssQ0FBQyxBQUNoQixJQUFJLEdBQUcsQ0FBRyxLQUFLLENBQUMsQUFDaEIsSUFBSSxHQUFHLENBQUcsS0FBSyxDQUFDLEFBQ2hCLElBQUksR0FBRyxDQUFHLEtBQUssQ0FBQyxBQUVoQixHQUFHLEVBQUksR0FBRyxDQUFDLEFBRVgsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUMsQUFFL0QsTUFBTSxHQUFHLENBQVcsS0FBSyxDQUN6QixBQUQwQixNQUNwQixHQUFHLENBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQSxBQUN6QyxNQUFNLE9BQU8sQ0FBRyxnQkFBZ0IsQ0FFaEMsQUFGaUMsT0FFekIsR0FBRyxFQUFFLEFBQ1gsQ0FEWSxJQUNQLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxBQUNsQixLQUFLLE9BQU8sQ0FBQyxBQUNiLElBQUssU0FBUyxDQUNoQixBQURpQixDQUNoQixBQUVELE1BQU0sR0FBRyxDQUFHLEdBQUcsQ0FBRyxHQUFHLENBQUMsQUFDdEIsTUFBTSxHQUFHLENBQUcsR0FBRyxFQUFJLEdBQUcsQ0FBQyxBQUN2QixNQUFNLEdBQUcsQ0FBRyxHQUFHLEdBQUssR0FBRyxDQUFDLEFBQ3hCLE1BQU0sR0FBRyxDQUFHLEdBQUcsRUFBSSxHQUFHLENBQUMsQUFDdkIsTUFBTSxHQUFHLENBQUcsR0FBRyxHQUFLLEdBQUcsQ0FBQyxBQUV4QixNQUFNLElBQUksQ0FBRyxPQUFPLENBQUMsQUFDckIsTUFBTSxHQUFHLENBQUcsQ0FBQSxNQUFBLEVBQVMsSUFBSSxDQUFBLENBQUUsQ0FBQyJ9
javascript example
https://evanw.github.io/source-map-visualization/#NDE3ACJ1c2Ugc3RyaWN0IjtsZXQgZm9vPSJmb28iO2xldCBib289ImJvbyI7bGV0IGJhcj0iYmFyIjtsZXQgYmF6PSJiYXoiO2Zvbys9YmFyO2V2YWwoImZ1bmN0aW9uIGhpKG5hbWUpIHsgcmV0dXJuIGBIaSAke25hbWV9YCB9IGhpKCd3b3JsZCEnKSIpO2NvbnN0IGtleT0ia2V5Ijtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBkeW5hbWljPSJzb21lZHluYW1pY2tleSI7c3dpdGNoKGtleSl7Y2FzZSBvYmpbZHluYW1pY106Y2FzZSBkeW5hbWljOmNhc2UibGl0ZXJhbCI6fWNvbnN0IGFiYz1ib28rYmF6O2NvbnN0IGRlZj1ib289PWJhejtjb25zdCBnaGk9Ym9vPT09YmF6O2NvbnN0IGprbD1ib28hPWJhejtjb25zdCBtbm89Ym9vIT09YmF6O2NvbnN0IHdvcmQ9IndvcmxkIjtjb25zdCBzdHI9YGhlbGxvICR7d29yZH1gOzExODgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9ncmlmZmluL0NvbnRyYXN0L25vZGUtc3djLXBsdWdpbnMvdGVzdC9zd2MtYnVnL3NyYy9qYXZhc2NyaXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubGV0IGZvbyA9ICdmb28nO1xubGV0IGJvbyA9ICdib28nO1xubGV0IGJhciA9ICdiYXInO1xubGV0IGJheiA9ICdiYXonO1xuXG5mb28gKz0gYmFyO1xuXG5ldmFsKFwiZnVuY3Rpb24gaGkobmFtZSkgeyByZXR1cm4gYEhpICR7bmFtZX1gIH0gaGkoJ3dvcmxkIScpXCIpO1xuXG5jb25zdCBrZXkgPSAna2V5JztcbmNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5jb25zdCBkeW5hbWljID0gJ3NvbWVkeW5hbWlja2V5Jztcblxuc3dpdGNoIChrZXkpIHtcbiAgY2FzZSBvYmpbZHluYW1pY106XG4gIGNhc2UgZHluYW1pYzpcbiAgY2FzZSAnbGl0ZXJhbCc6XG59XG5cbmNvbnN0IGFiYyA9IGJvbyArIGJhejtcbmNvbnN0IGRlZiA9IGJvbyA9PSBiYXo7XG5jb25zdCBnaGkgPSBib28gPT09IGJhejtcbmNvbnN0IGprbCA9IGJvbyAhPSBiYXo7XG5jb25zdCBtbm8gPSBib28gIT09IGJhejtcblxuY29uc3Qgd29yZCA9ICd3b3JsZCc7XG5jb25zdCBzdHIgPSBgaGVsbG8gJHt3b3JkfWA7XG4iXSwibmFtZXMiOlsiZm9vIiwiYm9vIiwiYmFyIiwiYmF6IiwiZXZhbCIsImtleSIsIm9iaiIsIk9iamVjdCIsImNyZWF0ZSIsImR5bmFtaWMiLCJhYmMiLCJkZWYiLCJnaGkiLCJqa2wiLCJtbm8iLCJ3b3JkIiwic3RyIl0sIm1hcHBpbmdzIjoiQUFBQSxhQUVBLElBQUlBLElBQU0sTUFDVixJQUFJQyxJQUFNLE1BQ1YsSUFBSUMsSUFBTSxNQUNWLElBQUlDLElBQU0sTUFFVkgsS0FBT0UsSUFFUEUsS0FBSywwREFFTCxNQUFNQyxJQUFNLE1BQ1osTUFBTUMsSUFBTUMsT0FBT0MsTUFBTSxDQUFDLE1BQzFCLE1BQU1DLFFBQVUsaUJBRWhCLE9BQVFKLEtBQ04sS0FBS0MsR0FBRyxDQUFDRyxRQUFRLENBQ2pCLEtBQUtBLFFBQ0wsSUFBSyxVQUNQLENBRUEsTUFBTUMsSUFBTVQsSUFBTUUsSUFDbEIsTUFBTVEsSUFBTVYsS0FBT0UsSUFDbkIsTUFBTVMsSUFBTVgsTUFBUUUsSUFDcEIsTUFBTVUsSUFBTVosS0FBT0UsSUFDbkIsTUFBTVcsSUFBTWIsTUFBUUUsSUFFcEIsTUFBTVksS0FBTyxRQUNiLE1BQU1DLElBQU0sQ0FBQyxNQUFNLEVBQUVELEtBQUssQ0FBQyJ9
The text was updated successfully, but these errors were encountered: