Skip to content

Commit

Permalink
improve performance of mappings serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
sokra committed Aug 2, 2021
1 parent a23222d commit fde8cbc
Showing 1 changed file with 59 additions and 28 deletions.
87 changes: 59 additions & 28 deletions lib/helpers/createMappingsSerializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,6 @@ const createFullMappingsSerializer = () => {
}

const writeValue = value => {
if (value === 0) {
str += "A";
return;
}
const sign = (value >>> 31) & 1;
const mask = value >> 31;
const absValue = (value + mask) ^ mask;
Expand All @@ -93,12 +89,20 @@ const createFullMappingsSerializer = () => {
currentColumn = generatedColumn;
if (sourceIndex >= 0) {
activeMapping = true;
writeValue(sourceIndex - currentSourceIndex);
currentSourceIndex = sourceIndex;
if (sourceIndex === currentSourceIndex) {
str += "A";
} else {
writeValue(sourceIndex - currentSourceIndex);
currentSourceIndex = sourceIndex;
}
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
writeValue(originalColumn - currentOriginalColumn);
currentOriginalColumn = originalColumn;
if (originalColumn === currentOriginalColumn) {
str += "A";
} else {
writeValue(originalColumn - currentOriginalColumn);
currentOriginalColumn = originalColumn;
}
if (nameIndex >= 0) {
writeValue(nameIndex - currentNameIndex);
currentNameIndex = nameIndex;
Expand Down Expand Up @@ -126,24 +130,16 @@ const createLinesOnlyMappingsSerializer = () => {
_originalColumn,
_nameIndex
) => {
let str = "";
if (sourceIndex < 0) {
// avoid writing generated mappings at all
return str;
return "";
}
if (lastWrittenLine === generatedLine) {
// avoid writing multiple original mappings per line
return str;
}
while (currentLine < generatedLine) {
str += ";";
currentLine++;
return "";
}
let str;
const writeValue = value => {
if (value === 0) {
str += "A";
return;
}
const sign = (value >>> 31) & 1;
const mask = value >> 31;
const absValue = (value + mask) ^ mask;
Expand All @@ -159,16 +155,51 @@ const createLinesOnlyMappingsSerializer = () => {
}
}
};
str += "A";
if (sourceIndex >= 0) {
lastWrittenLine = currentLine;
writeValue(sourceIndex - currentSourceIndex);
currentSourceIndex = sourceIndex;
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
str += "A";
lastWrittenLine = generatedLine;
if (generatedLine === currentLine + 1) {
currentLine = generatedLine;
if (sourceIndex === currentSourceIndex) {
currentSourceIndex = sourceIndex;
if (originalLine === currentOriginalLine + 1) {
currentOriginalLine = originalLine;
return ";AACA";
} else {
str = ";AA";
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
return str + "A";
}
} else {
str = ";A";
writeValue(sourceIndex - currentSourceIndex);
currentSourceIndex = sourceIndex;
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
return str + "A";
}
} else {
str = ";".repeat(generatedLine - currentLine);
currentLine = generatedLine;
if (sourceIndex === currentSourceIndex) {
currentSourceIndex = sourceIndex;
if (originalLine === currentOriginalLine + 1) {
currentOriginalLine = originalLine;
return str + "AACA";
} else {
str += "AA";
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
return str + "A";
}
} else {
str += "A";
writeValue(sourceIndex - currentSourceIndex);
currentSourceIndex = sourceIndex;
writeValue(originalLine - currentOriginalLine);
currentOriginalLine = originalLine;
return str + "A";
}
}
return str;
};
};

Expand Down

0 comments on commit fde8cbc

Please # to comment.