(decode source-map)
(decode mappings source-map)
Convert a v3 source map JSON object into a nested sorted map
organized as file, line, and column. Note this source map
maps from *generated* source location to original source
location.
Source
(defn decode
"Convert a v3 source map JSON object into a nested sorted map
organized as file, line, and column. Note this source map
maps from *generated* source location to original source
location."
([source-map]
(decode (:mappings source-map) source-map))
([mappings source-map]
(let [relseg-init [0 0 0 0 0]
lines (seq (string/split mappings #";"))]
(loop [gline 0 lines lines relseg relseg-init result {}]
(if lines
(let [line (first lines)
[result relseg]
(if (string/blank? line)
[result relseg]
(let [segs (seq (string/split line #","))]
(loop [segs segs relseg relseg result result]
(if segs
(let [seg (first segs)
nrelseg (seg-combine (base64-vlq/decode seg) relseg)]
(recur (next segs) nrelseg
(update-result result (seg->map nrelseg source-map) gline)))
[result relseg]))))]
(recur (inc gline) (next lines) (assoc relseg 0 0) result))
result)))))