forked from M3-Academy/challenge-algorithms-v2.0
201 lines
6.7 KiB
Markdown
201 lines
6.7 KiB
Markdown
|
# sourcemap-codec
|
|||
|
|
|||
|
Encode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).
|
|||
|
|
|||
|
|
|||
|
## Why?
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
This package makes the process slightly easier.
|
|||
|
|
|||
|
|
|||
|
## Installation
|
|||
|
|
|||
|
```bash
|
|||
|
npm install sourcemap-codec
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## Usage
|
|||
|
|
|||
|
```js
|
|||
|
import { encode, decode } from 'sourcemap-codec';
|
|||
|
|
|||
|
var decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );
|
|||
|
|
|||
|
assert.deepEqual( decoded, [
|
|||
|
// the first line (of the generated code) has no mappings,
|
|||
|
// as shown by the starting semi-colon (which separates lines)
|
|||
|
[],
|
|||
|
|
|||
|
// the second line contains four (comma-separated) segments
|
|||
|
[
|
|||
|
// segments are encoded as you'd expect:
|
|||
|
// [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]
|
|||
|
|
|||
|
// i.e. the first segment begins at column 2, and maps back to the second column
|
|||
|
// of the second line (both zero-based) of the 0th source, and uses the 0th
|
|||
|
// name in the `map.names` array
|
|||
|
[ 2, 0, 2, 2, 0 ],
|
|||
|
|
|||
|
// the remaining segments are 4-length rather than 5-length,
|
|||
|
// because they don't map a name
|
|||
|
[ 4, 0, 2, 4 ],
|
|||
|
[ 6, 0, 2, 5 ],
|
|||
|
[ 7, 0, 2, 7 ]
|
|||
|
],
|
|||
|
|
|||
|
// the final line contains two segments
|
|||
|
[
|
|||
|
[ 2, 1, 10, 19 ],
|
|||
|
[ 12, 1, 11, 20 ]
|
|||
|
]
|
|||
|
]);
|
|||
|
|
|||
|
var encoded = encode( decoded );
|
|||
|
assert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );
|
|||
|
```
|
|||
|
|
|||
|
## Benchmarks
|
|||
|
|
|||
|
```
|
|||
|
node v18.0.0
|
|||
|
|
|||
|
amp.js.map - 45120 segments
|
|||
|
|
|||
|
Decode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 5479160 bytes
|
|||
|
sourcemap-codec 5659336 bytes
|
|||
|
source-map-0.6.1 17144440 bytes
|
|||
|
source-map-0.8.0 6867424 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Decode speed:
|
|||
|
decode: @jridgewell/sourcemap-codec x 502 ops/sec ±1.03% (90 runs sampled)
|
|||
|
decode: sourcemap-codec x 445 ops/sec ±0.97% (92 runs sampled)
|
|||
|
decode: source-map-0.6.1 x 36.01 ops/sec ±1.64% (49 runs sampled)
|
|||
|
decode: source-map-0.8.0 x 367 ops/sec ±0.04% (95 runs sampled)
|
|||
|
Fastest is decode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 1261620 bytes
|
|||
|
sourcemap-codec 9119248 bytes
|
|||
|
source-map-0.6.1 8968560 bytes
|
|||
|
source-map-0.8.0 8952952 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode speed:
|
|||
|
encode: @jridgewell/sourcemap-codec x 738 ops/sec ±0.42% (98 runs sampled)
|
|||
|
encode: sourcemap-codec x 238 ops/sec ±0.73% (88 runs sampled)
|
|||
|
encode: source-map-0.6.1 x 162 ops/sec ±0.43% (84 runs sampled)
|
|||
|
encode: source-map-0.8.0 x 191 ops/sec ±0.34% (90 runs sampled)
|
|||
|
Fastest is encode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
|
|||
|
babel.min.js.map - 347793 segments
|
|||
|
|
|||
|
Decode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 35338184 bytes
|
|||
|
sourcemap-codec 35922736 bytes
|
|||
|
source-map-0.6.1 62366360 bytes
|
|||
|
source-map-0.8.0 44337416 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Decode speed:
|
|||
|
decode: @jridgewell/sourcemap-codec x 40.35 ops/sec ±4.47% (54 runs sampled)
|
|||
|
decode: sourcemap-codec x 36.76 ops/sec ±3.67% (51 runs sampled)
|
|||
|
decode: source-map-0.6.1 x 4.44 ops/sec ±2.15% (16 runs sampled)
|
|||
|
decode: source-map-0.8.0 x 59.35 ops/sec ±0.05% (78 runs sampled)
|
|||
|
Fastest is decode: source-map-0.8.0
|
|||
|
|
|||
|
Encode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 7212604 bytes
|
|||
|
sourcemap-codec 21421456 bytes
|
|||
|
source-map-0.6.1 25286888 bytes
|
|||
|
source-map-0.8.0 25498744 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode speed:
|
|||
|
encode: @jridgewell/sourcemap-codec x 112 ops/sec ±0.13% (84 runs sampled)
|
|||
|
encode: sourcemap-codec x 30.23 ops/sec ±2.76% (53 runs sampled)
|
|||
|
encode: source-map-0.6.1 x 19.43 ops/sec ±3.70% (37 runs sampled)
|
|||
|
encode: source-map-0.8.0 x 19.40 ops/sec ±3.26% (37 runs sampled)
|
|||
|
Fastest is encode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
|
|||
|
preact.js.map - 1992 segments
|
|||
|
|
|||
|
Decode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 500272 bytes
|
|||
|
sourcemap-codec 516864 bytes
|
|||
|
source-map-0.6.1 1596672 bytes
|
|||
|
source-map-0.8.0 517272 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Decode speed:
|
|||
|
decode: @jridgewell/sourcemap-codec x 16,137 ops/sec ±0.17% (99 runs sampled)
|
|||
|
decode: sourcemap-codec x 12,139 ops/sec ±0.13% (99 runs sampled)
|
|||
|
decode: source-map-0.6.1 x 1,264 ops/sec ±0.12% (100 runs sampled)
|
|||
|
decode: source-map-0.8.0 x 9,894 ops/sec ±0.08% (101 runs sampled)
|
|||
|
Fastest is decode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 321026 bytes
|
|||
|
sourcemap-codec 830832 bytes
|
|||
|
source-map-0.6.1 586608 bytes
|
|||
|
source-map-0.8.0 586680 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode speed:
|
|||
|
encode: @jridgewell/sourcemap-codec x 19,876 ops/sec ±0.78% (95 runs sampled)
|
|||
|
encode: sourcemap-codec x 6,983 ops/sec ±0.15% (100 runs sampled)
|
|||
|
encode: source-map-0.6.1 x 5,070 ops/sec ±0.12% (102 runs sampled)
|
|||
|
encode: source-map-0.8.0 x 5,641 ops/sec ±0.17% (100 runs sampled)
|
|||
|
Fastest is encode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
|
|||
|
react.js.map - 5726 segments
|
|||
|
|
|||
|
Decode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 734848 bytes
|
|||
|
sourcemap-codec 954200 bytes
|
|||
|
source-map-0.6.1 2276432 bytes
|
|||
|
source-map-0.8.0 955488 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Decode speed:
|
|||
|
decode: @jridgewell/sourcemap-codec x 5,723 ops/sec ±0.12% (98 runs sampled)
|
|||
|
decode: sourcemap-codec x 4,555 ops/sec ±0.09% (101 runs sampled)
|
|||
|
decode: source-map-0.6.1 x 437 ops/sec ±0.11% (93 runs sampled)
|
|||
|
decode: source-map-0.8.0 x 3,441 ops/sec ±0.15% (100 runs sampled)
|
|||
|
Fastest is decode: @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode Memory Usage:
|
|||
|
@jridgewell/sourcemap-codec 638672 bytes
|
|||
|
sourcemap-codec 1109840 bytes
|
|||
|
source-map-0.6.1 1321224 bytes
|
|||
|
source-map-0.8.0 1324448 bytes
|
|||
|
Smallest memory usage is @jridgewell/sourcemap-codec
|
|||
|
|
|||
|
Encode speed:
|
|||
|
encode: @jridgewell/sourcemap-codec x 6,801 ops/sec ±0.48% (98 runs sampled)
|
|||
|
encode: sourcemap-codec x 2,533 ops/sec ±0.13% (101 runs sampled)
|
|||
|
encode: source-map-0.6.1 x 2,248 ops/sec ±0.08% (100 runs sampled)
|
|||
|
encode: source-map-0.8.0 x 2,303 ops/sec ±0.15% (100 runs sampled)
|
|||
|
Fastest is encode: @jridgewell/sourcemap-codec
|
|||
|
```
|
|||
|
|
|||
|
# License
|
|||
|
|
|||
|
MIT
|