From 4ea5726c57704579c463d39d8b1e027f33ed5a00 Mon Sep 17 00:00:00 2001 From: Manas Ranjan Dikshit Date: Fri, 3 Apr 2026 00:46:55 +0530 Subject: [PATCH 1/2] Change Uint32Array to Int32Array in readMappings --- lib/helpers/readMappings.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/helpers/readMappings.js b/lib/helpers/readMappings.js index 28dcece..cdee520 100644 --- a/lib/helpers/readMappings.js +++ b/lib/helpers/readMappings.js @@ -35,8 +35,8 @@ const ccMax = ccToValue.length - 1; * @returns {void} */ const readMappings = (mappings, onMapping) => { - // generatedColumn, [sourceIndex, originalLine, orignalColumn, [nameIndex]] - const currentData = new Uint32Array([0, 0, 1, 0, 0]); + // generatedColumn, [sourceIndex, originalLine, originalColumn, [nameIndex]] + const currentData = new Int32Array([0, 0, 1, 0, 0]); let currentDataPos = 0; // currentValue will include a sign bit at bit 0 let currentValue = 0; @@ -116,5 +116,4 @@ const readMappings = (mappings, onMapping) => { ); } }; - module.exports = readMappings; From a0d0a0f6a6d5281e4e1528c19a0a710c07e302f3 Mon Sep 17 00:00:00 2001 From: Manas Ranjan Dikshit Date: Mon, 6 Apr 2026 23:49:25 +0530 Subject: [PATCH 2/2] Add tests for readMappings function --- test/readMapping.js | 76 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 test/readMapping.js diff --git a/test/readMapping.js b/test/readMapping.js new file mode 100644 index 0000000..d3cc54d --- /dev/null +++ b/test/readMapping.js @@ -0,0 +1,76 @@ +"use strict"; + +const readMappings = require("../lib/helpers/readMappings"); + +describe("readMappings", () => { + it("should correctly decode negative VLQ deltas (backwards column references)", () => { + const mappings = []; + + // Mapping with a negative column delta (backwards reference) + readMappings( + "AAKA;CAAC", + ( + generatedLine, + generatedColumn, + sourceIndex, + originalLine, + originalColumn, + nameIndex, + ) => { + mappings.push({ + generatedLine, + generatedColumn, + sourceIndex, + originalLine, + originalColumn, + nameIndex, + }); + }, + ); + + expect(mappings).toHaveLength(2); + + // First mapping: line 1, col 0, source 0, orig line 5, orig col 0 + expect(mappings[0].generatedLine).toBe(1); + expect(mappings[0].generatedColumn).toBe(0); + expect(mappings[0].sourceIndex).toBe(0); + expect(mappings[0].originalLine).toBe(5); + expect(mappings[0].originalColumn).toBe(0); + + // Second mapping: line 2 — negative delta on originalColumn (col goes backwards) + expect(mappings[1].generatedLine).toBe(2); + expect(mappings[1].generatedColumn).toBe(1); + expect(mappings[1].sourceIndex).toBe(1); + expect(mappings[1].originalLine).toBe(5); + expect(mappings[1].originalColumn).toBe(-1); + }); + + it("should handle mappings without source info", () => { + const mappings = []; + + readMappings("A", (generatedLine, generatedColumn, sourceIndex) => { + mappings.push({ generatedLine, generatedColumn, sourceIndex }); + }); + + expect(mappings).toHaveLength(1); + expect(mappings[0].generatedLine).toBe(1); + expect(mappings[0].generatedColumn).toBe(0); + expect(mappings[0].sourceIndex).toBe(-1); + }); + + it("should handle multiple lines", () => { + const mappings = []; + + readMappings( + "AAAA;AACA;AACA", + (generatedLine, generatedColumn, sourceIndex, originalLine) => { + mappings.push({ generatedLine, generatedColumn, originalLine }); + }, + ); + + expect(mappings).toHaveLength(3); + expect(mappings[0].generatedLine).toBe(1); + expect(mappings[1].generatedLine).toBe(2); + expect(mappings[2].generatedLine).toBe(3); + }); +});