Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add comment for posterity
  • Loading branch information
Timer committed Sep 6, 2017
commit 742baceef97e767527498a2ad8b2ab66ad748333
23 changes: 21 additions & 2 deletions packages/react-error-overlay/src/utils/unmapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,25 @@ function count(search: string, string: string): number {
return count;
}

function normalizePath(_path: string): string {
// `path.normalize` cleans a file path, (e.g. /foo//baz/..//bar/ becomes
// /foo/bar/).
// The web version of this module only provides POSIX support, so Windows
// paths like C:\foo\\baz\..\\bar\ cannot be normalized.
// A simple solution to this is to replace all `\` with `/`, then normalize
// afterwards.
//
// Note:
// `path.normalize` supports POSIX forward slashes on Windows, but not the
// other way around. Converting all backslashes to forward slashes before
// normalizing makes this cross platform if it were isomorphic (used server
// side).
return path.normalize(
// Match contiguous backslashes
_path.replace(/[\\]+/g, '/')
);
}

/**
* Turns a set of mapped <code>StackFrame</code>s back into their generated code position and enhances them with code.
* @param {string} fileUri The URI of the <code>bundle.js</code> file.
Expand Down Expand Up @@ -56,15 +75,15 @@ async function unmap(
}
let { fileName } = frame;
if (fileName) {
fileName = path.normalize(fileName.replace(/[\\]+/g, '/'));
fileName = normalizePath(fileName);
}
if (fileName == null) {
return frame;
}
const fN: string = fileName;
const source = map
.getSources()
.map(s => s.replace(/[\\]+/g, '/'))
.map(normalizePath)
.filter(p => {
p = path.normalize(p);
const i = p.lastIndexOf(fN);
Expand Down