133 lines
3.3 KiB
JavaScript
Vendored
133 lines
3.3 KiB
JavaScript
Vendored
import { encode } from 'vlq';
|
|
import getLocator from './getLocator.js';
|
|
|
|
export default function encodeMappings ( original, intro, chunk, hires, sourcemapLocations, sourceIndex, offsets, names ) {
|
|
let rawLines = [];
|
|
|
|
let generatedCodeLine = intro.split( '\n' ).length - 1;
|
|
let rawSegments = rawLines[ generatedCodeLine ] = [];
|
|
|
|
let generatedCodeColumn = 0;
|
|
|
|
const locate = getLocator( original );
|
|
|
|
function addEdit ( content, original, loc, nameIndex, i ) {
|
|
if ( i || content.length ) {
|
|
rawSegments.push({
|
|
generatedCodeLine,
|
|
generatedCodeColumn,
|
|
sourceCodeLine: loc.line,
|
|
sourceCodeColumn: loc.column,
|
|
sourceCodeName: nameIndex,
|
|
sourceIndex
|
|
});
|
|
}
|
|
|
|
let lines = content.split( '\n' );
|
|
let lastLine = lines.pop();
|
|
|
|
if ( lines.length ) {
|
|
generatedCodeLine += lines.length;
|
|
rawLines[ generatedCodeLine ] = rawSegments = [];
|
|
generatedCodeColumn = lastLine.length;
|
|
} else {
|
|
generatedCodeColumn += lastLine.length;
|
|
}
|
|
|
|
lines = original.split( '\n' );
|
|
lastLine = lines.pop();
|
|
|
|
if ( lines.length ) {
|
|
loc.line += lines.length;
|
|
loc.column = lastLine.length;
|
|
} else {
|
|
loc.column += lastLine.length;
|
|
}
|
|
}
|
|
|
|
function addUneditedChunk ( chunk, loc ) {
|
|
let originalCharIndex = chunk.start;
|
|
let first = true;
|
|
|
|
while ( originalCharIndex < chunk.end ) {
|
|
if ( hires || first || sourcemapLocations[ originalCharIndex ] ) {
|
|
rawSegments.push({
|
|
generatedCodeLine,
|
|
generatedCodeColumn,
|
|
sourceCodeLine: loc.line,
|
|
sourceCodeColumn: loc.column,
|
|
sourceCodeName: -1,
|
|
sourceIndex
|
|
});
|
|
}
|
|
|
|
if ( original[ originalCharIndex ] === '\n' ) {
|
|
loc.line += 1;
|
|
loc.column = 0;
|
|
generatedCodeLine += 1;
|
|
rawLines[ generatedCodeLine ] = rawSegments = [];
|
|
generatedCodeColumn = 0;
|
|
} else {
|
|
loc.column += 1;
|
|
generatedCodeColumn += 1;
|
|
}
|
|
|
|
originalCharIndex += 1;
|
|
first = false;
|
|
}
|
|
}
|
|
|
|
while ( chunk ) {
|
|
let loc = locate( chunk.start );
|
|
|
|
if ( chunk.intro.length ) {
|
|
addEdit( chunk.intro, '', loc, -1, !!chunk.previous );
|
|
}
|
|
|
|
if ( chunk.edited ) {
|
|
addEdit( chunk.content, chunk.original, loc, chunk.storeName ? names.indexOf( chunk.original ) : -1, !!chunk.previous );
|
|
} else {
|
|
addUneditedChunk( chunk, loc );
|
|
}
|
|
|
|
if ( chunk.outro.length ) {
|
|
addEdit( chunk.outro, '', loc, -1, !!chunk.previous );
|
|
}
|
|
|
|
const nextChunk = chunk.next;
|
|
chunk = nextChunk;
|
|
}
|
|
|
|
offsets.sourceIndex = offsets.sourceIndex || 0;
|
|
offsets.sourceCodeLine = offsets.sourceCodeLine || 0;
|
|
offsets.sourceCodeColumn = offsets.sourceCodeColumn || 0;
|
|
offsets.sourceCodeName = offsets.sourceCodeName || 0;
|
|
|
|
const encoded = rawLines.map( segments => {
|
|
let generatedCodeColumn = 0;
|
|
|
|
return segments.map( segment => {
|
|
let arr = [
|
|
segment.generatedCodeColumn - generatedCodeColumn,
|
|
segment.sourceIndex - offsets.sourceIndex,
|
|
segment.sourceCodeLine - offsets.sourceCodeLine,
|
|
segment.sourceCodeColumn - offsets.sourceCodeColumn
|
|
];
|
|
|
|
generatedCodeColumn = segment.generatedCodeColumn;
|
|
offsets.sourceIndex = segment.sourceIndex;
|
|
offsets.sourceCodeLine = segment.sourceCodeLine;
|
|
offsets.sourceCodeColumn = segment.sourceCodeColumn;
|
|
|
|
if ( ~segment.sourceCodeName ) {
|
|
arr.push( segment.sourceCodeName - offsets.sourceCodeName );
|
|
offsets.sourceCodeName = segment.sourceCodeName;
|
|
}
|
|
|
|
return encode( arr );
|
|
}).join( ',' );
|
|
}).join( ';' );
|
|
|
|
return encoded;
|
|
}
|