@swc/jest does not produce the correct source map for TypeScript
Describe the bug
When switching from babel-jest to @swc/jest, the sourcemap is not correct, producing incorrect code coverage.
When using babel-jest:
----------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------------------|---------|----------|---------|---------|-------------------
All files | 99.49 | 95.77 | 100 | 99.81 |
ts | 99.59 | 99.47 | 100 | 100 |
constants.ts | 100 | 100 | 100 | 100 |
hasTersifyFn.ts | 100 | 100 | 100 | 100 |
AcornTypes.ts | 0 | 0 | 0 | 0 |
index.ts | 0 | 0 | 0 | 0 |
...BinaryOperatorOrder.ts | 100 | 100 | 100 | 100 |
tersifyAcorn.ts | 99.37 | 93.1 | 100 | 99.66 | 598
----------------------------|---------|----------|---------|---------|-------------------
When using @swc/jest:
----------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------------------|---------|----------|---------|---------|-------------------
tersible.ts | 100 | 100 | 100 | 100 |
tersify.ts | 100 | 98.97 | 100 | 100 | 14
...nction.browser.spec.ts | 0 | 0 | 0 | 0 | 2-1511 <-- this one is fine. The test is disabled due to swc codegen formatting issue.
...ifyFunction.browser.ts | 0 | 0 | 0 | 0 | 2-16 <-- this one is fine.
tersifyFunction.ts | 100 | 100 | 100 | 100 |
...ifyFunctionByString.ts | 4.49 | 0 | 0 | 5.12 | 9-145 <-- this one is fine.
trim.ts | 100 | 100 | 100 | 100 |
types.ts | 100 | 100 | 100 | 100 |
typesInternal.ts | 0 | 100 | 100 | 0 | 2
ts/tersifyAcorn | 95.46 | 87.01 | 100 | 96.02 |
AcornTypes.ts | 0 | 100 | 100 | 0 | 2
index.ts | 42.85 | 33.33 | 100 | 47.36 | 20-36
...BinaryOperatorOrder.ts | 100 | 100 | 100 | 100 |
tersifyAcorn.ts | 98.76 | 91.95 | 100 | 99.01 | 391-392,502
----------------------------|---------|----------|---------|---------|-------------------
repro: https://github.com/unional/tersify/tree/swc-vs-babel
run yarn coverage -c jest.config.swc.js
When there are test failure, the call stack is wrong due to the same reason, so the incorrect failure line is highlighted.
Input code
Adding
{
transform: {
'^.+\\.(t|j)sx?$': ['@swc/jest'],
}
}
to `jest.config.js`
Config
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false,
"decorators": false,
"dynamicImport": false
},
"target": "es2020"
}
}
Playground link
No response
Expected behavior
The source map and code coverage should be correct.
Actual behavior
No response
Version
1.2.124
Additional context
No response
To make it easier to debug and repro, I do the same to the color-map repo.
https://github.com/unional/color-map/tree/swc
You can run it with yarn coverage vs yarn coverage:swc
babel-jest:
------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
createColors.ts | 100 | 100 | 100 | 100 |
createColorsFromMap.ts | 100 | 100 | 100 | 100 |
index.ts | 0 | 0 | 0 | 0 |
interfaces.ts | 0 | 0 | 0 | 0 |
rgbHex.ts | 100 | 100 | 100 | 100 |
rgbaString.ts | 100 | 100 | 100 | 100 |
------------------------|---------|----------|---------|---------|-------------------
@swc/jest:
------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------------------|---------|----------|---------|---------|-------------------
All files | 62.82 | 36.3 | 71.42 | 72.8 |
createColors.ts | 63.15 | 40 | 57.14 | 68 | 15-18,24-29
createColorsFromMap.ts | 65.85 | 18.18 | 57.14 | 71.42 | 16-19,25-30
index.ts | 53.12 | 40.9 | 81.81 | 69.38 | 32-38,70-84
interfaces.ts | 100 | 100 | 100 | 100 |
rgbHex.ts | 100 | 100 | 100 | 100 |
rgbaString.ts | 100 | 100 | 100 | 100 |
------------------------|---------|----------|---------|---------|-------------------
Did you notice any issues with the debugger in IDE? I noticed that the debugger stops working in Webstorm with @swc/jest
I do not debug through IDE. I run it in terminal with jest or jest --watch most of the time
Can you try the latest version of @swc/core? (v1.2.155)
Patches in https://github.com/swc-project/swc/pull/4007 are very likely to fix this issue.
Can anyone make an executable repro case? node.js seems to consume sourcemap of swc without any problem.
See https://github.com/kdy1/swc/tree/6cea544afa481e063cff6d8d493d8d12dadb280a/crates/swc/tests/stacktrace for exmaple repro case.
Can you try the latest version? (v1.2.156)
There was a bug fix for a module that only contains export * from './foo' and such module is super common, so I think it can be the cause of this.
Hi, I have tried 1.2.156 and it seems like it still have some issues.
Here is the coverage using babel (yarn coverage):
----------------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------------------------|---------|----------|---------|---------|-------------------
All files | 37.36 | 73.45 | 18.02 | 40.95 |
ts | 15.95 | 50.66 | 6.26 | 17.32 |
constants.ts | 100 | 100 | 100 | 100 |
hasTersifyFn.ts | 100 | 100 | 100 | 100 |
index.ts | 0 | 0 | 0 | 0 |
tersible.ts | 100 | 100 | 100 | 100 |
tersify.ts | 100 | 100 | 100 | 100 |
tersifyFunction.browser.spec.ts | 0 | 0 | 0 | 0 | 7-1187
tersifyFunction.browser.ts | 0 | 0 | 0 | 0 |
tersifyFunction.ts | 100 | 100 | 100 | 100 |
tersifyFunctionByString.ts | 0 | 0 | 0 | 0 | 6-146
trim.ts | 100 | 100 | 100 | 100 |
types.ts | 0 | 0 | 0 | 0 |
typesInternal.ts | 0 | 0 | 0 | 0 |
ts/tersifyAcorn | 99.42 | 93.1 | 100 | 99.69 |
AcornTypes.ts | 0 | 0 | 0 | 0 |
index.ts | 0 | 0 | 0 | 0 |
isHigherBinaryOperatorOrder.ts | 100 | 100 | 100 | 100 |
tersifyAcorn.ts | 99.37 | 93.1 | 100 | 99.66 | 598
----------------------------------|---------|----------|---------|---------|-------------------
here is the result for swc (yarn coverage -c jest.config.swc.js):
----------------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------------------------|---------|----------|---------|---------|-------------------
All files | 38.2 | 72.07 | 18.48 | 42.25 |
ts | 17.79 | 47.82 | 6.65 | 19.51 |
constants.ts | 100 | 100 | 100 | 100 |
hasTersifyFn.ts | 100 | 100 | 100 | 100 |
index.ts | 66.66 | 33.33 | 100 | 100 | 1-2
tersible.ts | 100 | 100 | 100 | 100 |
tersify.ts | 100 | 100 | 100 | 100 |
tersifyFunction.browser.spec.ts | 0 | 0 | 0 | 0 | 7-1187
tersifyFunction.ts | 100 | 100 | 100 | 100 |
tersifyFunctionByString.ts | 3.4 | 0 | 0 | 3.89 | 6-146
trim.ts | 100 | 100 | 100 | 100 |
ts/tersifyAcorn | 98.55 | 91.06 | 100 | 99.09 |
index.ts | 66.66 | 33.33 | 100 | 100 | 1
isHigherBinaryOperatorOrder.ts | 100 | 100 | 100 | 100 |
tersifyAcorn.ts | 98.73 | 91.81 | 100 | 99 | 456-457,598
----------------------------------|---------|----------|---------|---------|-------------------
Test Suites: 3 passed, 3 total
Tests: 1 skipped, 2 todo, 287 passed, 290 total
Snapshots: 0 total
Time: 1.549 s
Repro link: https://github.com/unional/tersify/tree/swc-vs-babel
● Test suite failed to run
D:\code\unional\color-map\ts\interfaces.ts: No element indexed by 0
at ArraySet_at [as at] (node_modules/@babel/core/node_modules/source-map/lib/array-set.js:109:9)
at BasicSourceMapConsumer.<anonymous> (node_modules/@babel/core/node_modules/source-map/lib/source-map-consumer.js:143:67)
at Array.map (<anonymous>)
at BasicSourceMapConsumer.SourceMapConsumer_eachMapping [as eachMapping] (node_modules/@babel/core/node_modules/source-map/lib/source-map-consumer.js:142:14)
at buildMappingData (node_modules/@babel/core/lib/transformation/file/merge-map.js:145:12)
at mergeSourceMap (node_modules/@babel/core/lib/transformation/file/merge-map.js:19:17)
at generateCode (node_modules/@babel/core/lib/transformation/file/generate.js:72:39)
at run (node_modules/@babel/core/lib/transformation/index.js:53:33)
at run.next (<anonymous>)
at transform (node_modules/@babel/core/lib/transform.js:25:41)
When I'm retesting this, I also notice these errors.
It happens when barreling type only files. i.e.:
// index.ts
export * from './types`
// types.ts
export type A = {}
export type B = {}
export type C = {}
I fixed the repro by using "type export":
// index.ts
export type { A, B, C } from './types'
Here is the repro on color-map.
yarn coverage (using babel):
------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
createColors.ts | 100 | 100 | 100 | 100 |
createColorsFromMap.ts | 100 | 100 | 100 | 100 |
index.ts | 0 | 0 | 0 | 0 |
interfaces.ts | 0 | 0 | 0 | 0 |
rgbHex.ts | 100 | 100 | 100 | 100 |
rgbaString.ts | 100 | 100 | 100 | 100 |
------------------------|---------|----------|---------|---------|-------------------
Test Suites: 4 passed, 4 total
Tests: 12 passed, 12 total
Snapshots: 0 total
Time: 3.543 s
yarn coverage:swc (using swc):
------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------------------|---------|----------|---------|---------|-------------------
All files | 92 | 68 | 100 | 100 |
createColors.ts | 100 | 100 | 100 | 100 |
createColorsFromMap.ts | 100 | 100 | 100 | 100 |
index.ts | 66.66 | 33.33 | 100 | 100 | 1-5
rgbHex.ts | 100 | 100 | 100 | 100 |
rgbaString.ts | 100 | 100 | 100 | 100 |
------------------------|---------|----------|---------|---------|-------------------
Test Suites: 4 passed, 4 total
Tests: 12 passed, 12 total
Snapshots: 0 total
Time: 1.364 s
So it definitely improved. 🌷
repro link: https://github.com/unional/color-map/tree/swc
Okay, thanks! Now I know what could cause such issues. So I'll work on it.
(I really never thought a file without an identifier can cause it...)
Um..... I tried 1.2.157.
The crash due to empty export (https://github.com/swc-project/swc/issues/3180#issuecomment-1069298566) is fixed.
but the coverage result is still the same.
Okay, I checked that ESM version is good while common js version is bad.
And js file seems to be handled properly. js
Hi, I updated the repro to use 1.2.158, the result is still the same. thx.
Hmm... I'm not sure what's required for jest to understand that it's used
Ref: Sorucemap is now correct. https://evanw.github.io/source-map-visualization/#MjU4NgAidXNlIHN0cmljdCI7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICAgIHZhbHVlOiB0cnVlCn0pOwp2YXIgX2V4cG9ydE5hbWVzID0ge307CnZhciBzd2NIZWxwZXJzID0gcmVxdWlyZSgiQHN3Yy9oZWxwZXJzIik7CnZhciBfY3JlYXRlQ29sb3JzID0gc3djSGVscGVycy5pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoIi4vY3JlYXRlQ29sb3JzIikpOwpPYmplY3Qua2V5cyhfY3JlYXRlQ29sb3JzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuOwogICAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2NyZWF0ZUNvbG9yc1trZXldKSByZXR1cm47CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gX2NyZWF0ZUNvbG9yc1trZXldOwogICAgICAgIH0KICAgIH0pOwp9KTsKdmFyIF9jcmVhdGVDb2xvcnNGcm9tTWFwID0gc3djSGVscGVycy5pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoIi4vY3JlYXRlQ29sb3JzRnJvbU1hcCIpKTsKT2JqZWN0LmtleXMoX2NyZWF0ZUNvbG9yc0Zyb21NYXApLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CiAgICBpZiAoa2V5ID09PSAiZGVmYXVsdCIgfHwga2V5ID09PSAiX19lc01vZHVsZSIpIHJldHVybjsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47CiAgICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY3JlYXRlQ29sb3JzRnJvbU1hcFtrZXldKSByZXR1cm47CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gX2NyZWF0ZUNvbG9yc0Zyb21NYXBba2V5XTsKICAgICAgICB9CiAgICB9KTsKfSk7CnZhciBfaW50ZXJmYWNlcyA9IHN3Y0hlbHBlcnMuaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKCIuL2ludGVyZmFjZXMiKSk7Ck9iamVjdC5rZXlzKF9pbnRlcmZhY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuOwogICAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2ludGVyZmFjZXNba2V5XSkgcmV0dXJuOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF9pbnRlcmZhY2VzW2tleV07CiAgICAgICAgfQogICAgfSk7Cn0pOwp2YXIgX3JnYkhleCA9IHN3Y0hlbHBlcnMuaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKCIuL3JnYkhleCIpKTsKT2JqZWN0LmtleXMoX3JnYkhleCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgIGlmIChrZXkgPT09ICJkZWZhdWx0IiB8fCBrZXkgPT09ICJfX2VzTW9kdWxlIikgcmV0dXJuOwogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjsKICAgIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9yZ2JIZXhba2V5XSkgcmV0dXJuOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZ2JIZXhba2V5XTsKICAgICAgICB9CiAgICB9KTsKfSk7CnZhciBfcmdiYVN0cmluZyA9IHN3Y0hlbHBlcnMuaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKCIuL3JnYmFTdHJpbmciKSk7Ck9iamVjdC5rZXlzKF9yZ2JhU3RyaW5nKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuOwogICAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX3JnYmFTdHJpbmdba2V5XSkgcmV0dXJuOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZ2JhU3RyaW5nW2tleV07CiAgICAgICAgfQogICAgfSk7Cn0pOwo3MDMAewogICJtYXBwaW5ncyI6ICJBQUFBLFlBQUE7OztFQUFBOzs7OERBQWMsZ0JBQWdCO0FBQTlCLFlBQUEsYUFBOEI7OzsyQ0FBOUIsYUFBOEI7Ozs7bUJBQTlCLGFBQThCOztNQUE5QjtFQUE4QixBQUE5QjtxRUFDYyx1QkFBdUI7QUFBckMsWUFBQSxvQkFBcUM7OzsyQ0FBckMsb0JBQXFDOzs7O21CQUFyQyxvQkFBcUM7O01BRHJDO0VBQ3FDLEFBRHJDOzREQUVjLGNBQWM7QUFBNUIsWUFBQSxXQUE0Qjs7OzJDQUE1QixXQUE0Qjs7OzttQkFBNUIsV0FBNEI7O01BRjVCO0VBRTRCLEFBRjVCO3dEQUdjLFVBQVU7QUFBeEIsWUFBQSxPQUF3Qjs7OzJDQUF4QixPQUF3Qjs7OzttQkFBeEIsT0FBd0I7O01BSHhCO0VBR3dCLEFBSHhCOzREQUljLGNBQWM7QUFBNUIsWUFBQSxXQUE0Qjs7OzJDQUE1QixXQUE0Qjs7OzttQkFBNUIsV0FBNEI7O01BSjVCO0VBSTRCLEFBSjVCIiwKICAibmFtZXMiOiBbXSwKICAic291cmNlcyI6IFsKICAgICIuLi8uLi9pbnB1dC9pbmRleC50cyIKICBdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZUNvbG9ycydcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlQ29sb3JzRnJvbU1hcCdcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcydcbmV4cG9ydCAqIGZyb20gJy4vcmdiSGV4J1xuZXhwb3J0ICogZnJvbSAnLi9yZ2JhU3RyaW5nJyIKICBdLAogICJ2ZXJzaW9uIjogMwp9Cg==
Hi, I have added compile with babel (yarn build:babel) and swc (yarn build:swc) to help analyze this.
I have also checked in lcov.info from babel and lcov.info from swc for comparison.
From what I know, jest just uses Istanbul for code coverage. So it shouldn't have much deviation there.
Comparing the two source map, this babel one maps the whole code block:
https://evanw.github.io/source-map-visualization/#MjY1MAAidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX2NyZWF0ZUNvbG9ycyA9IHJlcXVpcmUoIi4vY3JlYXRlQ29sb3JzIik7CgpPYmplY3Qua2V5cyhfY3JlYXRlQ29sb3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICBpZiAoa2V5ID09PSAiZGVmYXVsdCIgfHwga2V5ID09PSAiX19lc01vZHVsZSIpIHJldHVybjsKICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY3JlYXRlQ29sb3JzW2tleV0pIHJldHVybjsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBfY3JlYXRlQ29sb3JzW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9jcmVhdGVDb2xvcnNGcm9tTWFwID0gcmVxdWlyZSgiLi9jcmVhdGVDb2xvcnNGcm9tTWFwIik7CgpPYmplY3Qua2V5cyhfY3JlYXRlQ29sb3JzRnJvbU1hcCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2NyZWF0ZUNvbG9yc0Zyb21NYXBba2V5XSkgcmV0dXJuOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIF9jcmVhdGVDb2xvcnNGcm9tTWFwW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9pbnRlcmZhY2VzID0gcmVxdWlyZSgiLi9pbnRlcmZhY2VzIik7CgpPYmplY3Qua2V5cyhfaW50ZXJmYWNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2ludGVyZmFjZXNba2V5XSkgcmV0dXJuOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIF9pbnRlcmZhY2VzW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9yZ2JIZXggPSByZXF1aXJlKCIuL3JnYkhleCIpOwoKT2JqZWN0LmtleXMoX3JnYkhleCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX3JnYkhleFtrZXldKSByZXR1cm47CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gX3JnYkhleFtrZXldOwogICAgfQogIH0pOwp9KTsKCnZhciBfcmdiYVN0cmluZyA9IHJlcXVpcmUoIi4vcmdiYVN0cmluZyIpOwoKT2JqZWN0LmtleXMoX3JnYmFTdHJpbmcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogIGlmIChrZXkgPT09ICJkZWZhdWx0IiB8fCBrZXkgPT09ICJfX2VzTW9kdWxlIikgcmV0dXJuOwogIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9yZ2JhU3RyaW5nW2tleV0pIHJldHVybjsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBfcmdiYVN0cmluZ1trZXldOwogICAgfQogIH0pOwp9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzUnpMMmx1WkdWNExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3p0QlFVRkJPenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk96dEJRVU5CT3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPenRCUVVOQk96dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCT3p0QlFVTkJPenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk96dEJRVU5CT3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJQ29nWm5KdmJTQW5MaTlqY21WaGRHVkRiMnh2Y25NblhHNWxlSEJ2Y25RZ0tpQm1jbTl0SUNjdUwyTnlaV0YwWlVOdmJHOXljMFp5YjIxTllYQW5YRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMmx1ZEdWeVptRmpaWE1uWEc1bGVIQnZjblFnS2lCbWNtOXRJQ2N1TDNKbllraGxlQ2RjYm1WNGNHOXlkQ0FxSUdaeWIyMGdKeTR2Y21kaVlWTjBjbWx1WnlkY2JpSmRmUT09NTM1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlQ29sb3JzJ1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVDb2xvcnNGcm9tTWFwJ1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0ICogZnJvbSAnLi9yZ2JIZXgnXG5leHBvcnQgKiBmcm9tICcuL3JnYmFTdHJpbmcnXG4iXX0=

It seems like the source map is not correct. 🍺
No, it's not. It's simply pointing the first item.
Btw, why are you using commonjs only for swc?
I'm trying to get the sourcemap generated by babel, and found that your babel.config.js does not have common js plugin.
Oh, preset-env may use commonjs. Need investigation though
I see, I normally don't use babel to do compiling (just use tsc) so the setting for babel might be off.
I tried to mimic what jest see.
~You are correct that the babel output is not commonjs (https://github.com/swc-project/swc/issues/3180#issuecomment-1073138043). Need to change the babel config.~
The babel.config.js was used by jest and probably it adds commonjs setting on top of it.
UPDATE: actually it is in commonjs. I just overlooked:
Object.keys(_createColors).forEach(function (key) {
if (key === "default" || key === "__esModule") return; // <-- here
if (key in exports && exports[key] === _createColors[key]) return; // <-- here
Object.defineProperty(exports, key, { // <-- here
enumerable: true,
get: function () {
return _createColors[key];
}
});
});
I was thinking something wrong. It was not a problem that can be fixed by adding spans. We should remove them. 🤣 This is what babel does.
The generated can checked in code inside the babel folder has inline source map. That's what I use to do the visualization in https://github.com/swc-project/swc/issues/3180#issuecomment-1073138043
This closed issue has been automatically locked because it had no new activity for a month. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.