diff options
Diffstat (limited to 'node_modules/vue/src/server/bundle-renderer/source-map-support.js')
| -rw-r--r-- | node_modules/vue/src/server/bundle-renderer/source-map-support.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/node_modules/vue/src/server/bundle-renderer/source-map-support.js b/node_modules/vue/src/server/bundle-renderer/source-map-support.js new file mode 100644 index 00000000..1010532e --- /dev/null +++ b/node_modules/vue/src/server/bundle-renderer/source-map-support.js @@ -0,0 +1,45 @@ +/* @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 + } +} |
