UNPKG

@sanity/desk-tool

Version:

Tool for managing all sorts of content in a structured manner

87 lines (85 loc) 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StructureError = StructureError; var _generateHelpUrl = require("@sanity/generate-help-url"); var _structure = require("@sanity/structure"); var _ui = require("@sanity/ui"); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _icons = require("@sanity/icons"); var _PaneResolutionError = require("../utils/PaneResolutionError"); var _templateObject; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } var PathSegment = _styledComponents.default.span(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &:not(:last-child)::after {\n content: ' \u279D ';\n opacity: 0.5;\n }\n"]))); function formatStack(stack) { return stack // Prettify builder functions .replace(/\(\.\.\.\)\./g, '(...)\n .') // Remove webpack cruft from function names .replace(/__WEBPACK_IMPORTED_MODULE_\d+_+/g, '') // Remove default export postfix from function names .replace(/___default\./g, '.') // Replace full host path, leave only path to JS-file .replace(new RegExp(" \\(https?:\\/\\/".concat(window.location.host), 'g'), ' ('); } function StructureError(_ref) { var error = _ref.error; if (!(error instanceof _PaneResolutionError.PaneResolutionError)) { throw error; } var cause = error.cause; // Serialize errors are well-formatted and should be readable, in these cases a stack trace is // usually not helpful. Build errors in dev (with HMR) usually also contains a bunch of garbage // instead of an actual error message, so make sure we show the message in these cases as well var stack = (cause === null || cause === void 0 ? void 0 : cause.stack) || error.stack; var showStack = stack && !(cause instanceof _structure.SerializeError) && !error.message.includes('Module build failed:'); var path = cause instanceof _structure.SerializeError ? cause.path : []; var helpId = cause instanceof _structure.SerializeError && cause.helpId || error.helpId; var handleReload = (0, _react.useCallback)(() => { window.location.reload(); }, []); return /*#__PURE__*/_react.default.createElement(_ui.Card, { height: "fill", overflow: "auto", padding: 4, sizing: "border", tone: "critical" }, /*#__PURE__*/_react.default.createElement(_ui.Container, null, /*#__PURE__*/_react.default.createElement(_ui.Heading, { as: "h2" }, "Encountered an error while reading structure"), /*#__PURE__*/_react.default.createElement(_ui.Card, { marginTop: 4, padding: 4, radius: 2, overflow: "auto", shadow: 1, tone: "inherit" }, path.length > 0 && /*#__PURE__*/_react.default.createElement(_ui.Stack, { space: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Label, null, "Structure path"), /*#__PURE__*/_react.default.createElement(_ui.Code, null, path.slice(1).map((segment, i) => /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key _react.default.createElement(PathSegment, { key: "".concat(segment, "-").concat(i) }, segment)))), /*#__PURE__*/_react.default.createElement(_ui.Stack, { marginTop: 4, space: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Label, null, "Error"), /*#__PURE__*/_react.default.createElement(_ui.Code, null, showStack ? formatStack(stack) : error.message)), helpId && /*#__PURE__*/_react.default.createElement(_ui.Box, { marginTop: 4 }, /*#__PURE__*/_react.default.createElement(_ui.Text, null, /*#__PURE__*/_react.default.createElement("a", { href: (0, _generateHelpUrl.generateHelpUrl)(helpId), rel: "noopener noreferrer", target: "_blank" }, "View documentation"))), /*#__PURE__*/_react.default.createElement(_ui.Box, { marginTop: 4 }, /*#__PURE__*/_react.default.createElement(_ui.Button, { text: "Reload", icon: _icons.SyncIcon, tone: "primary", onClick: handleReload }))))); }