123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /* @flow */
- const SourceMapConsumer = require('source-map').SourceMapConsumer
- const filenameRE = /\(([^)]+\.js):(\d+):(\d+)\)$/
- export function createSourceMapConsumers (rawMaps: Object) {
- const maps = {}
- Object.keys(rawMaps).forEach(file => {
- maps[file] = new SourceMapConsumer(rawMaps[file])
- })
- return maps
- }
- export function rewriteErrorTrace (e: any, mapConsumers: {
- [key: string]: SourceMapConsumer
- }) {
- if (e && typeof e.stack === 'string') {
- e.stack = e.stack.split('\n').map(line => {
- return rewriteTraceLine(line, mapConsumers)
- }).join('\n')
- }
- }
- function rewriteTraceLine (trace: string, mapConsumers: {
- [key: string]: SourceMapConsumer
- }) {
- const m = trace.match(filenameRE)
- const map = m && mapConsumers[m[1]]
- if (m != null && map) {
- const originalPosition = map.originalPositionFor({
- line: Number(m[2]),
- column: Number(m[3])
- })
- if (originalPosition.source != null) {
- const { source, line, column } = originalPosition
- const mappedPosition = `(${source.replace(/^webpack:\/\/\//, '')}:${String(line)}:${String(column)})`
- return trace.replace(filenameRE, mappedPosition)
- } else {
- return trace
- }
- } else {
- return trace
- }
- }
|