UNPKG

testeranto

Version:

the AI powered BDD test framework for typescript projects

100 lines (99 loc) 8.47 kB
import React from 'react'; import { Tab, Alert, Badge, Nav, Card, ListGroup } from 'react-bootstrap'; export const BuildLogViewer = ({ logs, runtime }) => { var _a, _b, _c, _d, _e, _f; if (!logs) return React.createElement(Alert, { variant: "info" }, "Loading ", runtime.toLowerCase(), " build logs..."); const hasErrors = ((_a = logs.errors) === null || _a === void 0 ? void 0 : _a.length) > 0; const hasWarnings = ((_b = logs.warnings) === null || _b === void 0 ? void 0 : _b.length) > 0; const [activeTab, setActiveTab] = React.useState('summary'); return (React.createElement("div", null, React.createElement(Tab.Container, { activeKey: activeTab, onSelect: (k) => setActiveTab(k || 'summary') }, React.createElement(Nav, { variant: "tabs", className: "mb-3" }, React.createElement(Nav.Item, null, React.createElement(Nav.Link, { eventKey: "summary" }, "Build Summary")), React.createElement(Nav.Item, null, React.createElement(Nav.Link, { eventKey: "warnings" }, hasWarnings ? `⚠️ Warnings (${logs.warnings.length})` : 'Warnings')), React.createElement(Nav.Item, null, React.createElement(Nav.Link, { eventKey: "errors" }, hasErrors ? `❌ Errors (${logs.errors.length})` : 'Errors'))), React.createElement(Tab.Content, null, React.createElement(Tab.Pane, { eventKey: "summary" }, React.createElement(Card, null, React.createElement(Card.Header, { className: "d-flex justify-content-between align-items-center" }, React.createElement("h5", null, "Build Summary"), React.createElement("div", null, hasErrors && (React.createElement(Badge, { bg: "danger", className: "me-2" }, logs.errors.length, " Error", logs.errors.length !== 1 ? 's' : '')), hasWarnings && (React.createElement(Badge, { bg: "warning", text: "dark" }, logs.warnings.length, " Warning", logs.warnings.length !== 1 ? 's' : '')), !hasErrors && !hasWarnings && (React.createElement(Badge, { bg: "success" }, "Build Successful")))), React.createElement(Card.Body, null, React.createElement("div", { className: "mb-3" }, React.createElement("h6", null, "Input Files (", Object.keys(((_c = logs.metafile) === null || _c === void 0 ? void 0 : _c.inputs) || {}).length, ")"), React.createElement(ListGroup, { className: "max-h-200 overflow-auto" }, Object.keys(((_d = logs.metafile) === null || _d === void 0 ? void 0 : _d.inputs) || {}).map((file) => (React.createElement(ListGroup.Item, { key: file, className: "py-2" }, React.createElement("code", null, file), React.createElement("div", { className: "text-muted small" }, logs.metafile.inputs[file].bytes, " bytes")))))), React.createElement("div", null, React.createElement("h6", null, "Output Files (", Object.keys(((_e = logs.metafile) === null || _e === void 0 ? void 0 : _e.outputs) || {}).length, ")"), React.createElement(ListGroup, { className: "max-h-200 overflow-auto" }, Object.keys(((_f = logs.metafile) === null || _f === void 0 ? void 0 : _f.outputs) || {}).map((file) => (React.createElement(ListGroup.Item, { key: file, className: "py-2" }, React.createElement("code", null, file), React.createElement("div", { className: "text-muted small" }, logs.metafile.outputs[file].bytes, " bytes", logs.metafile.outputs[file].entryPoint && (React.createElement("span", { className: "ms-2 badge bg-info" }, "Entry Point"))))))))))), React.createElement(Tab.Pane, { eventKey: "warnings" }, hasWarnings ? (React.createElement(Card, { className: "border-warning" }, React.createElement(Card.Header, { className: "bg-warning text-white d-flex justify-content-between align-items-center" }, React.createElement("span", null, "Build Warnings (", logs.warnings.length, ")"), React.createElement(Badge, { bg: "light", text: "dark" }, new Date().toLocaleString())), React.createElement(Card.Body, { className: "p-0" }, React.createElement(ListGroup, { variant: "flush" }, logs.warnings.map((warn, i) => { var _a, _b; return (React.createElement(ListGroup.Item, { key: i, className: "text-warning" }, React.createElement("div", { className: "d-flex justify-content-between" }, React.createElement("strong", null, ((_a = warn.location) === null || _a === void 0 ? void 0 : _a.file) || 'Unknown file', ((_b = warn.location) === null || _b === void 0 ? void 0 : _b.line) && `:${warn.location.line}`), React.createElement("small", { className: "text-muted" }, warn.pluginName ? `[${warn.pluginName}]` : '')), React.createElement("div", { className: "mt-1" }, React.createElement("pre", { className: "mb-0 p-2 rounded" }, JSON.stringify(warn))))); }))))) : (React.createElement(Alert, { variant: "info" }, "No warnings found"))), React.createElement(Tab.Pane, { eventKey: "errors" }, hasErrors ? (React.createElement(Card, { className: "border-danger" }, React.createElement(Card.Header, { className: "bg-danger text-white d-flex justify-content-between align-items-center" }, React.createElement("span", null, "Build Errors (", logs.errors.length, ")"), React.createElement(Badge, { bg: "light", text: "dark" }, new Date().toLocaleString())), React.createElement(Card.Body, { className: "p-0" }, React.createElement(ListGroup, { variant: "flush" }, logs.errors.map((err, i) => { var _a, _b; return (React.createElement(ListGroup.Item, { key: i, className: "text-danger" }, React.createElement("div", { className: "d-flex justify-content-between" }, React.createElement("strong", null, ((_a = err.location) === null || _a === void 0 ? void 0 : _a.file) || 'Unknown file', ((_b = err.location) === null || _b === void 0 ? void 0 : _b.line) && `:${err.location.line}`), React.createElement("small", { className: "text-muted" }, err.pluginName ? `[${err.pluginName}]` : '')), React.createElement("div", { className: "mt-1" }, React.createElement("pre", { className: "mb-0 p-2 rounded" }, JSON.stringify(err))))); }))))) : (React.createElement(Alert, { variant: "success" }, React.createElement("h5", null, "No Errors Found"), React.createElement("p", { className: "mb-0" }, "The build completed without any errors.")))))))); };