99 lines
3.5 KiB
JavaScript
99 lines
3.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "parseComponentStack", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return parseComponentStack;
|
|
}
|
|
});
|
|
var LocationType = /*#__PURE__*/ function(LocationType) {
|
|
LocationType["FILE"] = "file";
|
|
LocationType["WEBPACK_INTERNAL"] = "webpack-internal";
|
|
LocationType["HTTP"] = "http";
|
|
LocationType["PROTOCOL_RELATIVE"] = "protocol-relative";
|
|
LocationType["UNKNOWN"] = "unknown";
|
|
return LocationType;
|
|
}(LocationType || {});
|
|
/**
|
|
* Get the type of frame line based on the location
|
|
*/ function getLocationType(location) {
|
|
if (location.startsWith('file://')) {
|
|
return "file";
|
|
}
|
|
if (location.includes('webpack-internal://')) {
|
|
return "webpack-internal";
|
|
}
|
|
if (location.startsWith('http://') || location.startsWith('https://')) {
|
|
return "http";
|
|
}
|
|
if (location.startsWith('//')) {
|
|
return "protocol-relative";
|
|
}
|
|
return "unknown";
|
|
}
|
|
function parseStackFrameLocation(location) {
|
|
const locationType = getLocationType(location);
|
|
const modulePath = location == null ? void 0 : location.replace(/^(webpack-internal:\/\/\/|file:\/\/)(\(.*\)\/)?/, '');
|
|
var _modulePath_match;
|
|
const [, file, lineNumber, column] = (_modulePath_match = modulePath == null ? void 0 : modulePath.match(/^(.+):(\d+):(\d+)/)) != null ? _modulePath_match : [];
|
|
switch(locationType){
|
|
case "file":
|
|
case "webpack-internal":
|
|
return {
|
|
canOpenInEditor: true,
|
|
file,
|
|
lineNumber: lineNumber ? Number(lineNumber) : undefined,
|
|
column: column ? Number(column) : undefined
|
|
};
|
|
// When the location is a URL we only show the file
|
|
// TODO: Resolve http(s) URLs through sourcemaps
|
|
case "http":
|
|
case "protocol-relative":
|
|
case "unknown":
|
|
default:
|
|
{
|
|
return {
|
|
canOpenInEditor: false
|
|
};
|
|
}
|
|
}
|
|
}
|
|
function parseComponentStack(componentStack) {
|
|
const componentStackFrames = [];
|
|
for (const line of componentStack.trim().split('\n')){
|
|
// TODO: support safari stack trace
|
|
// Get component and file from the component stack line
|
|
const match = /at ([^ ]+)( \((.*)\))?/.exec(line);
|
|
if (match == null ? void 0 : match[1]) {
|
|
const component = match[1];
|
|
const location = match[3];
|
|
if (!location) {
|
|
componentStackFrames.push({
|
|
canOpenInEditor: false,
|
|
component
|
|
});
|
|
continue;
|
|
}
|
|
// Stop parsing the component stack if we reach a Next.js component
|
|
if (location == null ? void 0 : location.includes('next/dist')) {
|
|
break;
|
|
}
|
|
const frameLocation = parseStackFrameLocation(location);
|
|
componentStackFrames.push({
|
|
component,
|
|
...frameLocation
|
|
});
|
|
}
|
|
}
|
|
return componentStackFrames;
|
|
}
|
|
|
|
if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
|
|
Object.defineProperty(exports.default, '__esModule', { value: true });
|
|
Object.assign(exports.default, exports);
|
|
module.exports = exports.default;
|
|
}
|
|
|
|
//# sourceMappingURL=parse-component-stack.js.map
|