-
Notifications
You must be signed in to change notification settings - Fork 108
/
Mappings.js
82 lines (69 loc) · 1.68 KB
/
Mappings.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
export default function Mappings ( hires ) {
let generatedCodeLine = 0;
let generatedCodeColumn = 0;
this.raw = [];
let rawSegments = this.raw[ generatedCodeLine ] = [];
let pending = null;
this.addEdit = ( sourceIndex, content, loc, nameIndex ) => {
if ( content.length ) {
const segment = [
generatedCodeColumn,
sourceIndex,
loc.line,
loc.column
];
if ( nameIndex >= 0 ) {
segment.push( nameIndex );
}
rawSegments.push( segment );
} else if ( pending ) {
rawSegments.push( pending );
}
this.advance( content );
pending = null;
};
this.addUneditedChunk = ( sourceIndex, chunk, original, loc, sourcemapLocations ) => {
let originalCharIndex = chunk.start;
let first = true;
while ( originalCharIndex < chunk.end ) {
if ( hires || first || sourcemapLocations[ originalCharIndex ] ) {
rawSegments.push([
generatedCodeColumn,
sourceIndex,
loc.line,
loc.column
]);
}
if ( original[ originalCharIndex ] === '\n' ) {
loc.line += 1;
loc.column = 0;
generatedCodeLine += 1;
this.raw[ generatedCodeLine ] = rawSegments = [];
generatedCodeColumn = 0;
} else {
loc.column += 1;
generatedCodeColumn += 1;
}
originalCharIndex += 1;
first = false;
}
pending = [
generatedCodeColumn,
sourceIndex,
loc.line,
loc.column
];
};
this.advance = str => {
if ( !str ) return;
const lines = str.split( '\n' );
if ( lines.length > 1 ) {
for ( let i = 0; i < lines.length - 1; i++ ) {
generatedCodeLine++;
this.raw[generatedCodeLine] = rawSegments = [];
}
generatedCodeColumn = 0;
}
generatedCodeColumn += lines[lines.length - 1].length;
};
}