Skip to content

Commit 8d8dd25

Browse files
committed
Resolve source map URL/path relative to the script
1 parent 420f285 commit 8d8dd25

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

packages/react-devtools-extensions/src/__tests__/parseHookNames-test.js

+2-15
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,11 @@ describe('parseHookNames', () => {
4141
// has a recursion breaker which falls back to the default behavior.
4242
Error.prepareStackTrace = (error, trace) => {
4343
return error.stack;
44-
}
44+
};
4545

4646
fetchMock.mockIf(/.+$/, request => {
4747
const {resolve} = require('path');
48-
const url = request.url;
49-
if (url.endsWith('js.map')) {
50-
// Source maps are relative URLs (e.g. "path/to/Exmaple.js" specifies "Exmaple.js.map").
51-
const sourceMapURL = resolve(
52-
__dirname,
53-
'__source__',
54-
'__compiled__',
55-
'external',
56-
url,
57-
);
58-
return Promise.resolve(requireText(sourceMapURL, 'utf8'));
59-
} else {
60-
return Promise.resolve(requireText(url, 'utf8'));
61-
}
48+
return Promise.resolve(requireText(request.url, 'utf8'));
6249
});
6350

6451
// Mock out portion of browser API used by parseHookNames to initialize "source-map".

packages/react-devtools-extensions/src/parseHookNames.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ function extractAndLoadSourceMaps(
189189
}
190190
} else {
191191
for (let i = 0; i < sourceMappingURLs.length; i++) {
192+
const fileName = ((hookSourceData.hookSource.fileName: any): string);
192193
const sourceMappingURL = sourceMappingURLs[i];
193194
const index = sourceMappingURL.indexOf('base64,');
194195
if (index >= 0) {
@@ -211,7 +212,6 @@ function extractAndLoadSourceMaps(
211212

212213
// Hook source might be a URL like "https://4syus.csb.app/src/App.js"
213214
// Parsed source map might be a partial path like "src/App.js"
214-
const fileName = ((hookSourceData.hookSource.fileName: any): string);
215215
const match = parsed.sources.find(
216216
source =>
217217
source === 'Inline Babel script' || fileName.includes(source),
@@ -235,6 +235,13 @@ function extractAndLoadSourceMaps(
235235
if (!isValidUrl(url)) {
236236
throw new Error(`Invalid source map URL "${url}"`);
237237
}
238+
} else if (!url.startsWith('/')) {
239+
// Resolve paths relative to the location of the file name
240+
const lastSlashIdx = fileName.lastIndexOf('/');
241+
if (lastSlashIdx !== -1) {
242+
const baseURL = fileName.slice(0, fileName.lastIndexOf('/'));
243+
url = `${baseURL}/${url}`;
244+
}
238245
}
239246

240247
hookSourceData.sourceMapURL = url;

0 commit comments

Comments
 (0)