lineSourceMap
A source map (v3); sources are as given (paths relative to the generated file).
import { vlq } from "#codebase/tcmts/loader/sourcemap"; import type { LineMapping } from "#codebase/tcmts/loader/sourcemap"; export function lineSourceMap(file: string, mappings: LineMapping[]): string { const sources = [...new Set(mappings.map((m) => m.source))]; const byLine = new Map(mappings.map((m) => [m.line, m])); const lastLine = Math.max(-1, ...mappings.map((m) => m.line)); let prevSource = 0; let prevLine = 0; let prevCol = 0; const lines: string[] = []; for (let l = 0; l <= lastLine; l++) { const m = byLine.get(l); if (!m) { lines.push(""); continue; } const s = sources.indexOf(m.source); let genPrev = 0; const segments: string[] = []; for (const [gen, col] of m.columns ?? [[0, 0]]) { // [generated column, source index delta, source line delta, source column delta] segments.push(vlq(gen - genPrev) + vlq(s - prevSource) + vlq(m.sourceLine - prevLine) + vlq(col - prevCol)); genPrev = gen; prevSource = s; prevLine = m.sourceLine; prevCol = col; } lines.push(segments.join(",")); } return JSON.stringify({ version: 3, file, sources, names: [], mappings: lines.join(";") }); }