UNPKG

@shopify/cli-kit

Version:

A set of utilities, interfaces, and models that are common across all the platform features

55 lines 3.35 kB
import { Banner } from './Banner.js'; import { TokenizedText } from './TokenizedText.js'; import { Command } from './Command.js'; import { List } from './List.js'; import { TabularData } from './TabularData.js'; import { BugError, cleanSingleStackTracePath, ExternalError } from '../../../../public/node/error.js'; import { Box, Text } from 'ink'; import React from 'react'; import StackTracey from 'stacktracey'; const FatalError = ({ error }) => { let stack; let tool; if (error instanceof BugError) { stack = new StackTracey(error); stack.items.forEach((item) => { item.file = cleanSingleStackTracePath(item.file); }); stack = stack.withSources(); stack = stack .filter((entry) => { return !entry.file.includes('@oclif/core'); }) .map((item) => { /** We make the paths relative to the packages/ directory */ const fileShortComponents = item.fileShort.split('packages/'); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion item.fileShort = fileShortComponents.length === 2 ? fileShortComponents[1] : fileShortComponents[0]; return item; }); } if (error instanceof ExternalError) { tool = `${error.command} ${error.args.join(' ')}`; } return (React.createElement(Banner, { type: tool ? 'external_error' : 'error' }, tool ? (React.createElement(Text, null, "Error coming from ", React.createElement(Command, { command: tool }))) : null, error.formattedMessage ? React.createElement(TokenizedText, { item: error.formattedMessage }) : React.createElement(Text, null, error.message), error.tryMessage ? React.createElement(TokenizedText, { item: error.tryMessage }) : null, error.nextSteps && error.nextSteps.length > 0 ? React.createElement(List, { title: "Next steps", items: error.nextSteps }) : null, error.customSections && error.customSections.length > 0 ? (React.createElement(Box, { flexDirection: "column", gap: 1 }, error.customSections.map((section, index) => (React.createElement(Box, { key: index, flexDirection: "column" }, section.title ? React.createElement(Text, { bold: true }, section.title) : null, typeof section.body === 'object' && 'tabularData' in section.body ? (React.createElement(TabularData, { ...section.body })) : (React.createElement(TokenizedText, { item: section.body }))))))) : null, stack && stack.items.length !== 0 ? (React.createElement(Box, { flexDirection: "column" }, React.createElement(Text, null, "To investigate the issue, examine this stack trace:"), stack.items.map((item, index) => (React.createElement(Box, { flexDirection: "column", key: index, paddingLeft: 2 }, React.createElement(Text, null, "at", item.calleeShort ? React.createElement(Text, { color: "yellow" }, ` ${item.calleeShort}`) : null, item.fileShort ? ` (${item.fileShort}:${item.line})` : null), React.createElement(Box, { paddingLeft: 2 }, React.createElement(Text, { dimColor: true }, item.sourceLine?.trim()))))))) : null)); }; export { FatalError }; //# sourceMappingURL=FatalError.js.map