Polyatic sourcemap-unmin

sourcemap‑unmin

Turn at a (app.min.js:1:9214) back into real code.

1 · Minified stack trace the V8 trace from your error report
2 · Source maps the .map files from that same build

Label each map with the bundle filename the stack mentions (e.g. app.min.js), then paste that bundle’s .map JSON. Or drop .map files onto this panel — they are read locally.

3 · De‑minified stack

Paste a stack trace on the left and the result appears here live — per frame: original file, function and line:column, plus which map decided it. There is no Generate button and nothing is uploaded.

Your stack trace and source maps never leave this browser. All source-map decoding runs locally, so nothing you paste is ever sent anywhere and it works on proprietary code. The page’s only network use is a single anonymous, self-hosted page-view count.

Honest limits & reason codes
  • You need the actual .map file(s) from the exact build that produced this stack — this tool cannot fetch, guess, or reconstruct them.
  • Frames match maps per frame, by filename: exact label first, then basename (a map labelled app.min.js catches https://cdn…/app.min.js?v=9). A wrong label means no-map-for-file for that frame.
  • The original code snippet appears only when the map embeds sourcesContent; otherwise you still get exact file · line:column, just no source line.
  • V8-shaped stacks only (Chrome, Node, Edge). Firefox/Safari lines, eval and native frames pass through untouched rather than being guessed at.
  • Index maps (top-level sections) and columns past a line’s last mapping come back unresolved with a reason instead of a fabricated location.

What this tool does — and its honest limits

What it does. A production error report usually arrives as a minified V8 stack trace — at t (app.min.js:1:9214) tells you almost nothing. Paste that stack plus the .map file(s) the same build produced, and each frame is decoded back to its original file, function name and line:column; when the map embeds sourcesContent, the actual original source line is shown too. Multi-bundle stacks work: each frame is matched to its map per frame, so a stack that crosses app.min.js and vendor.min.js resolves both. The result copies out as a readable stack for the bug report.

Why paste here instead of uploading? A source map with sourcesContent embeds your entire original source — it is your code. Services that fetch or upload the map to a server to translate the stack ask you to hand that over. Here the vendored Mozilla source-map 0.6.1 decoder runs entirely in this tab, so the map works on proprietary code without leaving your machine.

Honest limits — read before trusting the output. (1) You need the actual .map file(s) from the exact build that produced the stack; nothing is fetched, guessed, or reconstructed — no map means no-map-for-file, not magic un-mangling. (2) Original source snippets appear only when the map embeds sourcesContent; otherwise you still get the exact file · line:column, just no source text. (3) Frames match maps by filename, exact label first then basename — a map labelled app.min.js catches https://cdn…/app.min.js?v=9, but two bundles sharing a basename need exact labels to disambiguate. (4) V8 stack shapes only (Chrome, Node, Edge); Firefox/Safari lines, eval and native frames pass through unparsed rather than being guessed at. (5) Index maps (top-level sections) are detected but not remapped — those frames come back index-map-not-supported, because applying a wrong section offset would fabricate a location, and a wrong location is worse than none. The same honesty rule applies to a column past a line’s last mapping: it reports column-past-last-mapping instead of snapping to the nearest earlier mapping.

The library ships with the page. All remapping runs on an MIT-licensed CommonJS core (src/core.js) over the vendored Mozilla source-map 0.6.1 decoder (BSD‑3‑Clause) — there is no package to install; the exact code that renders these frames is the library.