swc icon indicating copy to clipboard operation
swc copied to clipboard

@swc/jest does not produce the correct source map for TypeScript

Open unional opened this issue 3 years ago • 24 comments

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

unional avatar Jan 03 '22 07:01 unional

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 | 
------------------------|---------|----------|---------|---------|-------------------

unional avatar Jan 03 '22 09:01 unional

Did you notice any issues with the debugger in IDE? I noticed that the debugger stops working in Webstorm with @swc/jest

jakub-tucek avatar Jan 03 '22 13:01 jakub-tucek

I do not debug through IDE. I run it in terminal with jest or jest --watch most of the time

unional avatar Jan 03 '22 19:01 unional

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.

kdy1 avatar Mar 14 '22 11:03 kdy1

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.

kdy1 avatar Mar 16 '22 00:03 kdy1

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.

kdy1 avatar Mar 16 '22 10:03 kdy1

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

unional avatar Mar 16 '22 15:03 unional

  ● 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'

unional avatar Mar 16 '22 16:03 unional

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

unional avatar Mar 16 '22 16:03 unional

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...)

kdy1 avatar Mar 17 '22 07:03 kdy1

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.

unional avatar Mar 18 '22 06:03 unional

Okay, I checked that ESM version is good while common js version is bad.

kdy1 avatar Mar 18 '22 07:03 kdy1

And js file seems to be handled properly. js

kdy1 avatar Mar 18 '22 07:03 kdy1

Hi, I updated the repro to use 1.2.158, the result is still the same. thx.

unional avatar Mar 19 '22 04:03 unional

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==

kdy1 avatar Mar 19 '22 05:03 kdy1

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.

unional avatar Mar 20 '22 00:03 unional

Comparing the two source map, this babel one maps the whole code block:

https://evanw.github.io/source-map-visualization/#MjY1MAAidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX2NyZWF0ZUNvbG9ycyA9IHJlcXVpcmUoIi4vY3JlYXRlQ29sb3JzIik7CgpPYmplY3Qua2V5cyhfY3JlYXRlQ29sb3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICBpZiAoa2V5ID09PSAiZGVmYXVsdCIgfHwga2V5ID09PSAiX19lc01vZHVsZSIpIHJldHVybjsKICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY3JlYXRlQ29sb3JzW2tleV0pIHJldHVybjsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBfY3JlYXRlQ29sb3JzW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9jcmVhdGVDb2xvcnNGcm9tTWFwID0gcmVxdWlyZSgiLi9jcmVhdGVDb2xvcnNGcm9tTWFwIik7CgpPYmplY3Qua2V5cyhfY3JlYXRlQ29sb3JzRnJvbU1hcCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2NyZWF0ZUNvbG9yc0Zyb21NYXBba2V5XSkgcmV0dXJuOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIF9jcmVhdGVDb2xvcnNGcm9tTWFwW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9pbnRlcmZhY2VzID0gcmVxdWlyZSgiLi9pbnRlcmZhY2VzIik7CgpPYmplY3Qua2V5cyhfaW50ZXJmYWNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2ludGVyZmFjZXNba2V5XSkgcmV0dXJuOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIF9pbnRlcmZhY2VzW2tleV07CiAgICB9CiAgfSk7Cn0pOwoKdmFyIF9yZ2JIZXggPSByZXF1aXJlKCIuL3JnYkhleCIpOwoKT2JqZWN0LmtleXMoX3JnYkhleCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgaWYgKGtleSA9PT0gImRlZmF1bHQiIHx8IGtleSA9PT0gIl9fZXNNb2R1bGUiKSByZXR1cm47CiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX3JnYkhleFtrZXldKSByZXR1cm47CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gX3JnYkhleFtrZXldOwogICAgfQogIH0pOwp9KTsKCnZhciBfcmdiYVN0cmluZyA9IHJlcXVpcmUoIi4vcmdiYVN0cmluZyIpOwoKT2JqZWN0LmtleXMoX3JnYmFTdHJpbmcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogIGlmIChrZXkgPT09ICJkZWZhdWx0IiB8fCBrZXkgPT09ICJfX2VzTW9kdWxlIikgcmV0dXJuOwogIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9yZ2JhU3RyaW5nW2tleV0pIHJldHVybjsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBfcmdiYVN0cmluZ1trZXldOwogICAgfQogIH0pOwp9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzUnpMMmx1WkdWNExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3p0QlFVRkJPenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk96dEJRVU5CT3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPenRCUVVOQk96dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCT3p0QlFVTkJPenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk96dEJRVU5CT3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJQ29nWm5KdmJTQW5MaTlqY21WaGRHVkRiMnh2Y25NblhHNWxlSEJ2Y25RZ0tpQm1jbTl0SUNjdUwyTnlaV0YwWlVOdmJHOXljMFp5YjIxTllYQW5YRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMmx1ZEdWeVptRmpaWE1uWEc1bGVIQnZjblFnS2lCbWNtOXRJQ2N1TDNKbllraGxlQ2RjYm1WNGNHOXlkQ0FxSUdaeWIyMGdKeTR2Y21kaVlWTjBjbWx1WnlkY2JpSmRmUT09NTM1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlQ29sb3JzJ1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVDb2xvcnNGcm9tTWFwJ1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0ICogZnJvbSAnLi9yZ2JIZXgnXG5leHBvcnQgKiBmcm9tICcuL3JnYmFTdHJpbmcnXG4iXX0=

unional avatar Mar 20 '22 00:03 unional

image

It seems like the source map is not correct. 🍺

unional avatar Mar 20 '22 00:03 unional

No, it's not. It's simply pointing the first item.

kdy1 avatar Mar 20 '22 12:03 kdy1

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.

kdy1 avatar Mar 20 '22 12:03 kdy1

Oh, preset-env may use commonjs. Need investigation though

kdy1 avatar Mar 20 '22 12:03 kdy1

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];
    }
  });
});

unional avatar Mar 20 '22 12:03 unional

image

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.

kdy1 avatar Mar 20 '22 12:03 kdy1

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

unional avatar Mar 20 '22 12:03 unional

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.

swc-bot avatar Oct 30 '22 12:10 swc-bot