UNPKG

next

Version:

The React Framework

83 lines (82 loc) 3 kB
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 }; } } } export 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; } //# sourceMappingURL=parse-component-stack.js.map