source: imaps-frontend/node_modules/@jridgewell/trace-mapping/README.md@ d565449

main
Last change on this file since d565449 was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 8.7 KB
RevLine 
[d565449]1# @jridgewell/trace-mapping
2
3> Trace the original position through a source map
4
5`trace-mapping` allows you to take the line and column of an output file and trace it to the
6original location in the source file through a source map.
7
8You may already be familiar with the [`source-map`][source-map] package's `SourceMapConsumer`. This
9provides the same `originalPositionFor` and `generatedPositionFor` API, without requiring WASM.
10
11## Installation
12
13```sh
14npm install @jridgewell/trace-mapping
15```
16
17## Usage
18
19```typescript
20import {
21 TraceMap,
22 originalPositionFor,
23 generatedPositionFor,
24 sourceContentFor,
25 isIgnored,
26} from '@jridgewell/trace-mapping';
27
28const tracer = new TraceMap({
29 version: 3,
30 sources: ['input.js'],
31 sourcesContent: ['content of input.js'],
32 names: ['foo'],
33 mappings: 'KAyCIA',
34 ignoreList: [],
35});
36
37// Lines start at line 1, columns at column 0.
38const traced = originalPositionFor(tracer, { line: 1, column: 5 });
39assert.deepEqual(traced, {
40 source: 'input.js',
41 line: 42,
42 column: 4,
43 name: 'foo',
44});
45
46const content = sourceContentFor(tracer, traced.source);
47assert.strictEqual(content, 'content for input.js');
48
49const generated = generatedPositionFor(tracer, {
50 source: 'input.js',
51 line: 42,
52 column: 4,
53});
54assert.deepEqual(generated, {
55 line: 1,
56 column: 5,
57});
58
59const ignored = isIgnored(tracer, 'input.js');
60assert.equal(ignored, false);
61```
62
63We also provide a lower level API to get the actual segment that matches our line and column. Unlike
64`originalPositionFor`, `traceSegment` uses a 0-base for `line`:
65
66```typescript
67import { traceSegment } from '@jridgewell/trace-mapping';
68
69// line is 0-base.
70const traced = traceSegment(tracer, /* line */ 0, /* column */ 5);
71
72// Segments are [outputColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]
73// Again, line is 0-base and so is sourceLine
74assert.deepEqual(traced, [5, 0, 41, 4, 0]);
75```
76
77### SectionedSourceMaps
78
79The sourcemap spec defines a special `sections` field that's designed to handle concatenation of
80output code with associated sourcemaps. This type of sourcemap is rarely used (no major build tool
81produces it), but if you are hand coding a concatenation you may need it. We provide an `AnyMap`
82helper that can receive either a regular sourcemap or a `SectionedSourceMap` and returns a
83`TraceMap` instance:
84
85```typescript
86import { AnyMap } from '@jridgewell/trace-mapping';
87const fooOutput = 'foo';
88const barOutput = 'bar';
89const output = [fooOutput, barOutput].join('\n');
90
91const sectioned = new AnyMap({
92 version: 3,
93 sections: [
94 {
95 // 0-base line and column
96 offset: { line: 0, column: 0 },
97 // fooOutput's sourcemap
98 map: {
99 version: 3,
100 sources: ['foo.js'],
101 names: ['foo'],
102 mappings: 'AAAAA',
103 },
104 },
105 {
106 // barOutput's sourcemap will not affect the first line, only the second
107 offset: { line: 1, column: 0 },
108 map: {
109 version: 3,
110 sources: ['bar.js'],
111 names: ['bar'],
112 mappings: 'AAAAA',
113 },
114 },
115 ],
116});
117
118const traced = originalPositionFor(sectioned, {
119 line: 2,
120 column: 0,
121});
122
123assert.deepEqual(traced, {
124 source: 'bar.js',
125 line: 1,
126 column: 0,
127 name: 'bar',
128});
129```
130
131## Benchmarks
132
133```
134node v18.0.0
135
136amp.js.map - 45120 segments
137
138Memory Usage:
139trace-mapping decoded 562400 bytes
140trace-mapping encoded 5706544 bytes
141source-map-js 10717664 bytes
142source-map-0.6.1 17446384 bytes
143source-map-0.8.0 9701757 bytes
144Smallest memory usage is trace-mapping decoded
145
146Init speed:
147trace-mapping: decoded JSON input x 180 ops/sec ±0.34% (85 runs sampled)
148trace-mapping: encoded JSON input x 364 ops/sec ±1.77% (89 runs sampled)
149trace-mapping: decoded Object input x 3,116 ops/sec ±0.50% (96 runs sampled)
150trace-mapping: encoded Object input x 410 ops/sec ±2.62% (85 runs sampled)
151source-map-js: encoded Object input x 84.23 ops/sec ±0.91% (73 runs sampled)
152source-map-0.6.1: encoded Object input x 37.21 ops/sec ±2.08% (51 runs sampled)
153Fastest is trace-mapping: decoded Object input
154
155Trace speed:
156trace-mapping: decoded originalPositionFor x 3,952,212 ops/sec ±0.17% (98 runs sampled)
157trace-mapping: encoded originalPositionFor x 3,487,468 ops/sec ±1.58% (90 runs sampled)
158source-map-js: encoded originalPositionFor x 827,730 ops/sec ±0.78% (97 runs sampled)
159source-map-0.6.1: encoded originalPositionFor x 748,991 ops/sec ±0.53% (94 runs sampled)
160source-map-0.8.0: encoded originalPositionFor x 2,532,894 ops/sec ±0.57% (95 runs sampled)
161Fastest is trace-mapping: decoded originalPositionFor
162
163
164***
165
166
167babel.min.js.map - 347793 segments
168
169Memory Usage:
170trace-mapping decoded 89832 bytes
171trace-mapping encoded 35474640 bytes
172source-map-js 51257176 bytes
173source-map-0.6.1 63515664 bytes
174source-map-0.8.0 42933752 bytes
175Smallest memory usage is trace-mapping decoded
176
177Init speed:
178trace-mapping: decoded JSON input x 15.41 ops/sec ±8.65% (34 runs sampled)
179trace-mapping: encoded JSON input x 28.20 ops/sec ±12.87% (42 runs sampled)
180trace-mapping: decoded Object input x 964 ops/sec ±0.36% (99 runs sampled)
181trace-mapping: encoded Object input x 31.77 ops/sec ±13.79% (45 runs sampled)
182source-map-js: encoded Object input x 6.45 ops/sec ±5.16% (21 runs sampled)
183source-map-0.6.1: encoded Object input x 4.07 ops/sec ±5.24% (15 runs sampled)
184Fastest is trace-mapping: decoded Object input
185
186Trace speed:
187trace-mapping: decoded originalPositionFor x 7,183,038 ops/sec ±0.58% (95 runs sampled)
188trace-mapping: encoded originalPositionFor x 5,192,185 ops/sec ±0.41% (100 runs sampled)
189source-map-js: encoded originalPositionFor x 4,259,489 ops/sec ±0.79% (94 runs sampled)
190source-map-0.6.1: encoded originalPositionFor x 3,742,629 ops/sec ±0.71% (95 runs sampled)
191source-map-0.8.0: encoded originalPositionFor x 6,270,211 ops/sec ±0.64% (94 runs sampled)
192Fastest is trace-mapping: decoded originalPositionFor
193
194
195***
196
197
198preact.js.map - 1992 segments
199
200Memory Usage:
201trace-mapping decoded 37128 bytes
202trace-mapping encoded 247280 bytes
203source-map-js 1143536 bytes
204source-map-0.6.1 1290992 bytes
205source-map-0.8.0 96544 bytes
206Smallest memory usage is trace-mapping decoded
207
208Init speed:
209trace-mapping: decoded JSON input x 3,483 ops/sec ±0.30% (98 runs sampled)
210trace-mapping: encoded JSON input x 6,092 ops/sec ±0.18% (97 runs sampled)
211trace-mapping: decoded Object input x 249,076 ops/sec ±0.24% (98 runs sampled)
212trace-mapping: encoded Object input x 14,555 ops/sec ±0.48% (100 runs sampled)
213source-map-js: encoded Object input x 2,447 ops/sec ±0.36% (99 runs sampled)
214source-map-0.6.1: encoded Object input x 1,201 ops/sec ±0.57% (96 runs sampled)
215Fastest is trace-mapping: decoded Object input
216
217Trace speed:
218trace-mapping: decoded originalPositionFor x 7,620,192 ops/sec ±0.09% (99 runs sampled)
219trace-mapping: encoded originalPositionFor x 6,872,554 ops/sec ±0.30% (97 runs sampled)
220source-map-js: encoded originalPositionFor x 2,489,570 ops/sec ±0.35% (94 runs sampled)
221source-map-0.6.1: encoded originalPositionFor x 1,698,633 ops/sec ±0.28% (98 runs sampled)
222source-map-0.8.0: encoded originalPositionFor x 4,015,644 ops/sec ±0.22% (98 runs sampled)
223Fastest is trace-mapping: decoded originalPositionFor
224
225
226***
227
228
229react.js.map - 5726 segments
230
231Memory Usage:
232trace-mapping decoded 16176 bytes
233trace-mapping encoded 681552 bytes
234source-map-js 2418352 bytes
235source-map-0.6.1 2443672 bytes
236source-map-0.8.0 111768 bytes
237Smallest memory usage is trace-mapping decoded
238
239Init speed:
240trace-mapping: decoded JSON input x 1,720 ops/sec ±0.34% (98 runs sampled)
241trace-mapping: encoded JSON input x 4,406 ops/sec ±0.35% (100 runs sampled)
242trace-mapping: decoded Object input x 92,122 ops/sec ±0.10% (99 runs sampled)
243trace-mapping: encoded Object input x 5,385 ops/sec ±0.37% (99 runs sampled)
244source-map-js: encoded Object input x 794 ops/sec ±0.40% (98 runs sampled)
245source-map-0.6.1: encoded Object input x 416 ops/sec ±0.54% (91 runs sampled)
246Fastest is trace-mapping: decoded Object input
247
248Trace speed:
249trace-mapping: decoded originalPositionFor x 32,759,519 ops/sec ±0.33% (100 runs sampled)
250trace-mapping: encoded originalPositionFor x 31,116,306 ops/sec ±0.33% (97 runs sampled)
251source-map-js: encoded originalPositionFor x 17,458,435 ops/sec ±0.44% (97 runs sampled)
252source-map-0.6.1: encoded originalPositionFor x 12,687,097 ops/sec ±0.43% (95 runs sampled)
253source-map-0.8.0: encoded originalPositionFor x 23,538,275 ops/sec ±0.38% (95 runs sampled)
254Fastest is trace-mapping: decoded originalPositionFor
255```
256
257[source-map]: https://www.npmjs.com/package/source-map
Note: See TracBrowser for help on using the repository browser.