Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// => ',' separates mappings in a line
// decoded mapping => [ generatedCodeColumn, sourceFileIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]
let sourceFileIndex = 0, // second field
sourceCodeLine = 0, // third field
sourceCodeColumn = 0; // fourth field
const lines = sourceMap.mappings.split(';');
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
// reset column position to 0 after each line
let generatedCodeColumn = 0;
// decode sections in line
const columns = lines[lineIndex].split(',');
for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {
const decodedSection = vlq.decode(columns[columnIndex]);
if (decodedSection.length >= 4) {
// update relative positions
generatedCodeColumn += decodedSection[0];
sourceFileIndex += decodedSection[1];
sourceCodeLine += decodedSection[2];
sourceCodeColumn += decodedSection[3];
}
// check if matching map
if (lineIndex === position.lineNumber) {
if (generatedCodeColumn === position.columnNumber) {
// matching column and line found
return new LogPosition(sourceMap.sources[sourceFileIndex], sourceCodeLine, sourceCodeColumn);
} else if (columnIndex + 1 === columns.length) {
// matching column not found, but line is correct
return new LogPosition(sourceMap.sources[sourceFileIndex], sourceCodeLine, 0);
let sourceRow = 1
// 文件列
let sourceColumn = 1
// 字段名
let sourceNameIndex = 0
for (let i = 0, len = lines.length; i < len; i++) {
let line = lines[i]
if (!line) {
continue
}
tempResult = result[i + 1] = {}
transformedColumn = 1
let arr = line.split(',')
for (let j = 0, len1 = arr.length; j < len1; j++) {
let ret = vlq.decode(arr[j])
let info = {}
transformedColumn += ret[0]
if (ret[1] !== undefined) {
sourceIndex += ret[1]
sourceRow += ret[2]
sourceColumn += ret[3]
info.sourceIndex = sourceIndex
info.row = sourceRow
info.column = sourceColumn
if (ret[4] !== undefined) {
sourceNameIndex += ret[4]
info.name = object.names[sourceNameIndex]
}
// assign info
tempResult[transformedColumn] = info
}
line => { return line.split(',').map(seg => vlq.decode(seg)); });
}
function decodeFunctionMap(
functionMap: ?FBSourceFunctionMap,
): $ReadOnlyArray {
if (!functionMap) {
return [];
}
const parsed = [];
let line = 1;
let nameIndex = 0;
for (const lineMappings of functionMap.mappings.split(';')) {
let column = 0;
for (const mapping of lineMappings.split(',')) {
const [columnDelta, nameDelta, lineDelta = 0] = vlq.decode(mapping);
line += lineDelta;
nameIndex += nameDelta;
column += columnDelta;
parsed.push({line, column, name: functionMap.names[nameIndex]});
}
}
return parsed;
}
function decodeFunctionMap(
functionMap: ?FBSourceFunctionMap,
): $ReadOnlyArray {
if (!functionMap) {
return [];
}
const parsed = [];
let line = 1;
let nameIndex = 0;
for (const lineMappings of functionMap.mappings.split(';')) {
let column = 0;
for (const mapping of lineMappings.split(',')) {
const [columnDelta, nameDelta, lineDelta = 0] = vlq.decode(mapping);
line += lineDelta;
nameIndex += nameDelta;
column += columnDelta;
parsed.push({line, column, name: functionMap.names[nameIndex]});
}
}
return parsed;
}
.map(function(v) { return vlq.decode(v); });
});