You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

264 lines
9.8 KiB

1 month ago
  1. # @jridgewell/sourcemap-codec
  2. Encode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).
  3. ## Why?
  4. Sourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap.
  5. This package makes the process slightly easier.
  6. ## Installation
  7. ```bash
  8. npm install @jridgewell/sourcemap-codec
  9. ```
  10. ## Usage
  11. ```js
  12. import { encode, decode } from '@jridgewell/sourcemap-codec';
  13. var decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );
  14. assert.deepEqual( decoded, [
  15. // the first line (of the generated code) has no mappings,
  16. // as shown by the starting semi-colon (which separates lines)
  17. [],
  18. // the second line contains four (comma-separated) segments
  19. [
  20. // segments are encoded as you'd expect:
  21. // [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]
  22. // i.e. the first segment begins at column 2, and maps back to the second column
  23. // of the second line (both zero-based) of the 0th source, and uses the 0th
  24. // name in the `map.names` array
  25. [ 2, 0, 2, 2, 0 ],
  26. // the remaining segments are 4-length rather than 5-length,
  27. // because they don't map a name
  28. [ 4, 0, 2, 4 ],
  29. [ 6, 0, 2, 5 ],
  30. [ 7, 0, 2, 7 ]
  31. ],
  32. // the final line contains two segments
  33. [
  34. [ 2, 1, 10, 19 ],
  35. [ 12, 1, 11, 20 ]
  36. ]
  37. ]);
  38. var encoded = encode( decoded );
  39. assert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );
  40. ```
  41. ## Benchmarks
  42. ```
  43. node v20.10.0
  44. amp.js.map - 45120 segments
  45. Decode Memory Usage:
  46. local code 5815135 bytes
  47. @jridgewell/sourcemap-codec 1.4.15 5868160 bytes
  48. sourcemap-codec 5492584 bytes
  49. source-map-0.6.1 13569984 bytes
  50. source-map-0.8.0 6390584 bytes
  51. chrome dev tools 8011136 bytes
  52. Smallest memory usage is sourcemap-codec
  53. Decode speed:
  54. decode: local code x 492 ops/sec ±1.22% (90 runs sampled)
  55. decode: @jridgewell/sourcemap-codec 1.4.15 x 499 ops/sec ±1.16% (89 runs sampled)
  56. decode: sourcemap-codec x 376 ops/sec ±1.66% (89 runs sampled)
  57. decode: source-map-0.6.1 x 34.99 ops/sec ±0.94% (48 runs sampled)
  58. decode: source-map-0.8.0 x 351 ops/sec ±0.07% (95 runs sampled)
  59. chrome dev tools x 165 ops/sec ±0.91% (86 runs sampled)
  60. Fastest is decode: @jridgewell/sourcemap-codec 1.4.15
  61. Encode Memory Usage:
  62. local code 444248 bytes
  63. @jridgewell/sourcemap-codec 1.4.15 623024 bytes
  64. sourcemap-codec 8696280 bytes
  65. source-map-0.6.1 8745176 bytes
  66. source-map-0.8.0 8736624 bytes
  67. Smallest memory usage is local code
  68. Encode speed:
  69. encode: local code x 796 ops/sec ±0.11% (97 runs sampled)
  70. encode: @jridgewell/sourcemap-codec 1.4.15 x 795 ops/sec ±0.25% (98 runs sampled)
  71. encode: sourcemap-codec x 231 ops/sec ±0.83% (86 runs sampled)
  72. encode: source-map-0.6.1 x 166 ops/sec ±0.57% (86 runs sampled)
  73. encode: source-map-0.8.0 x 203 ops/sec ±0.45% (88 runs sampled)
  74. Fastest is encode: local code,encode: @jridgewell/sourcemap-codec 1.4.15
  75. ***
  76. babel.min.js.map - 347793 segments
  77. Decode Memory Usage:
  78. local code 35424960 bytes
  79. @jridgewell/sourcemap-codec 1.4.15 35424696 bytes
  80. sourcemap-codec 36033464 bytes
  81. source-map-0.6.1 62253704 bytes
  82. source-map-0.8.0 43843920 bytes
  83. chrome dev tools 45111400 bytes
  84. Smallest memory usage is @jridgewell/sourcemap-codec 1.4.15
  85. Decode speed:
  86. decode: local code x 38.18 ops/sec ±5.44% (52 runs sampled)
  87. decode: @jridgewell/sourcemap-codec 1.4.15 x 38.36 ops/sec ±5.02% (52 runs sampled)
  88. decode: sourcemap-codec x 34.05 ops/sec ±4.45% (47 runs sampled)
  89. decode: source-map-0.6.1 x 4.31 ops/sec ±2.76% (15 runs sampled)
  90. decode: source-map-0.8.0 x 55.60 ops/sec ±0.13% (73 runs sampled)
  91. chrome dev tools x 16.94 ops/sec ±3.78% (46 runs sampled)
  92. Fastest is decode: source-map-0.8.0
  93. Encode Memory Usage:
  94. local code 2606016 bytes
  95. @jridgewell/sourcemap-codec 1.4.15 2626440 bytes
  96. sourcemap-codec 21152576 bytes
  97. source-map-0.6.1 25023928 bytes
  98. source-map-0.8.0 25256448 bytes
  99. Smallest memory usage is local code
  100. Encode speed:
  101. encode: local code x 127 ops/sec ±0.18% (83 runs sampled)
  102. encode: @jridgewell/sourcemap-codec 1.4.15 x 128 ops/sec ±0.26% (83 runs sampled)
  103. encode: sourcemap-codec x 29.31 ops/sec ±2.55% (53 runs sampled)
  104. encode: source-map-0.6.1 x 18.85 ops/sec ±3.19% (36 runs sampled)
  105. encode: source-map-0.8.0 x 19.34 ops/sec ±1.97% (36 runs sampled)
  106. Fastest is encode: @jridgewell/sourcemap-codec 1.4.15
  107. ***
  108. preact.js.map - 1992 segments
  109. Decode Memory Usage:
  110. local code 261696 bytes
  111. @jridgewell/sourcemap-codec 1.4.15 244296 bytes
  112. sourcemap-codec 302816 bytes
  113. source-map-0.6.1 939176 bytes
  114. source-map-0.8.0 336 bytes
  115. chrome dev tools 587368 bytes
  116. Smallest memory usage is source-map-0.8.0
  117. Decode speed:
  118. decode: local code x 17,782 ops/sec ±0.32% (97 runs sampled)
  119. decode: @jridgewell/sourcemap-codec 1.4.15 x 17,863 ops/sec ±0.40% (100 runs sampled)
  120. decode: sourcemap-codec x 12,453 ops/sec ±0.27% (101 runs sampled)
  121. decode: source-map-0.6.1 x 1,288 ops/sec ±1.05% (96 runs sampled)
  122. decode: source-map-0.8.0 x 9,289 ops/sec ±0.27% (101 runs sampled)
  123. chrome dev tools x 4,769 ops/sec ±0.18% (100 runs sampled)
  124. Fastest is decode: @jridgewell/sourcemap-codec 1.4.15
  125. Encode Memory Usage:
  126. local code 262944 bytes
  127. @jridgewell/sourcemap-codec 1.4.15 25544 bytes
  128. sourcemap-codec 323048 bytes
  129. source-map-0.6.1 507808 bytes
  130. source-map-0.8.0 507480 bytes
  131. Smallest memory usage is @jridgewell/sourcemap-codec 1.4.15
  132. Encode speed:
  133. encode: local code x 24,207 ops/sec ±0.79% (95 runs sampled)
  134. encode: @jridgewell/sourcemap-codec 1.4.15 x 24,288 ops/sec ±0.48% (96 runs sampled)
  135. encode: sourcemap-codec x 6,761 ops/sec ±0.21% (100 runs sampled)
  136. encode: source-map-0.6.1 x 5,374 ops/sec ±0.17% (99 runs sampled)
  137. encode: source-map-0.8.0 x 5,633 ops/sec ±0.32% (99 runs sampled)
  138. Fastest is encode: @jridgewell/sourcemap-codec 1.4.15,encode: local code
  139. ***
  140. react.js.map - 5726 segments
  141. Decode Memory Usage:
  142. local code 678816 bytes
  143. @jridgewell/sourcemap-codec 1.4.15 678816 bytes
  144. sourcemap-codec 816400 bytes
  145. source-map-0.6.1 2288864 bytes
  146. source-map-0.8.0 721360 bytes
  147. chrome dev tools 1012512 bytes
  148. Smallest memory usage is local code
  149. Decode speed:
  150. decode: local code x 6,178 ops/sec ±0.19% (98 runs sampled)
  151. decode: @jridgewell/sourcemap-codec 1.4.15 x 6,261 ops/sec ±0.22% (100 runs sampled)
  152. decode: sourcemap-codec x 4,472 ops/sec ±0.90% (99 runs sampled)
  153. decode: source-map-0.6.1 x 449 ops/sec ±0.31% (95 runs sampled)
  154. decode: source-map-0.8.0 x 3,219 ops/sec ±0.13% (100 runs sampled)
  155. chrome dev tools x 1,743 ops/sec ±0.20% (99 runs sampled)
  156. Fastest is decode: @jridgewell/sourcemap-codec 1.4.15
  157. Encode Memory Usage:
  158. local code 140960 bytes
  159. @jridgewell/sourcemap-codec 1.4.15 159808 bytes
  160. sourcemap-codec 969304 bytes
  161. source-map-0.6.1 930520 bytes
  162. source-map-0.8.0 930248 bytes
  163. Smallest memory usage is local code
  164. Encode speed:
  165. encode: local code x 8,013 ops/sec ±0.19% (100 runs sampled)
  166. encode: @jridgewell/sourcemap-codec 1.4.15 x 7,989 ops/sec ±0.20% (101 runs sampled)
  167. encode: sourcemap-codec x 2,472 ops/sec ±0.21% (99 runs sampled)
  168. encode: source-map-0.6.1 x 2,200 ops/sec ±0.17% (99 runs sampled)
  169. encode: source-map-0.8.0 x 2,220 ops/sec ±0.37% (99 runs sampled)
  170. Fastest is encode: local code
  171. ***
  172. vscode.map - 2141001 segments
  173. Decode Memory Usage:
  174. local code 198955264 bytes
  175. @jridgewell/sourcemap-codec 1.4.15 199175352 bytes
  176. sourcemap-codec 199102688 bytes
  177. source-map-0.6.1 386323432 bytes
  178. source-map-0.8.0 244116432 bytes
  179. chrome dev tools 293734280 bytes
  180. Smallest memory usage is local code
  181. Decode speed:
  182. decode: local code x 3.90 ops/sec ±22.21% (15 runs sampled)
  183. decode: @jridgewell/sourcemap-codec 1.4.15 x 3.95 ops/sec ±23.53% (15 runs sampled)
  184. decode: sourcemap-codec x 3.82 ops/sec ±17.94% (14 runs sampled)
  185. decode: source-map-0.6.1 x 0.61 ops/sec ±7.81% (6 runs sampled)
  186. decode: source-map-0.8.0 x 9.54 ops/sec ±0.28% (28 runs sampled)
  187. chrome dev tools x 2.18 ops/sec ±10.58% (10 runs sampled)
  188. Fastest is decode: source-map-0.8.0
  189. Encode Memory Usage:
  190. local code 13509880 bytes
  191. @jridgewell/sourcemap-codec 1.4.15 13537648 bytes
  192. sourcemap-codec 32540104 bytes
  193. source-map-0.6.1 127531040 bytes
  194. source-map-0.8.0 127535312 bytes
  195. Smallest memory usage is local code
  196. Encode speed:
  197. encode: local code x 20.10 ops/sec ±0.19% (38 runs sampled)
  198. encode: @jridgewell/sourcemap-codec 1.4.15 x 20.26 ops/sec ±0.32% (38 runs sampled)
  199. encode: sourcemap-codec x 5.44 ops/sec ±1.64% (18 runs sampled)
  200. encode: source-map-0.6.1 x 2.30 ops/sec ±4.79% (10 runs sampled)
  201. encode: source-map-0.8.0 x 2.46 ops/sec ±6.53% (10 runs sampled)
  202. Fastest is encode: @jridgewell/sourcemap-codec 1.4.15
  203. ```
  204. # License
  205. MIT