decodeMappings

tcmts.core.program.decodeMappings · #ijlfkmu2 · term · runs anywhere

A source map's mappings, decoded: per generated line, segments of [column, source, line, column] (absolute).

import { B64 } from "#codebase/tcmts/core/program";

export function decodeMappings(mappings: string): number[][][] {
  const state = [0, 0, 0, 0];
  return mappings.split(";").map((line) => {
    state[0] = 0;
    return line
      .split(",")
      .filter(Boolean)
      .map((seg) => {
        const values: number[] = [];
        for (let i = 0, shift = 0, v = 0; i < seg.length; i++) {
          const d = B64.indexOf(seg[i]!);
          v += (d & 31) << shift;
          if (d & 32) shift += 5;
          else {
            values.push(v & 1 ? -(v >>> 1) : v >>> 1);
            v = 0;
            shift = 0;
          }
        }
        for (let k = 0; k < values.length; k++) state[k]! += values[k]!;
        return state.slice(0, values.length);
      });
  });
}

uses

used by