UNPKG

next

Version:

The React Framework

99 lines (97 loc) 3.54 kB
"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