testeranto 0.159.0 → 0.160.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  failure 4 JSHandle@error
2
- {"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753215627296","lineNumber":376,"columnNumber":14}
3
- [{"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753215627296","lineNumber":376,"columnNumber":14}]
2
+ {"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753305302764","lineNumber":376,"columnNumber":14}
3
+ [{"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753305302764","lineNumber":376,"columnNumber":14}]
4
4
  Given error 1: JSHandle@error
5
- {"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753215627296","lineNumber":698,"columnNumber":16}
6
- [{"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753215627296","lineNumber":698,"columnNumber":16}]
5
+ {"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753305302764","lineNumber":698,"columnNumber":16}
6
+ [{"url":"file:///Users/adam/Code/testeranto/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs?cacheBust=1753305302764","lineNumber":698,"columnNumber":16}]
7
7
  fail JSHandle@error
8
8
  {"url":"pptr:evaluate;file%3A%2F%2F%2FUsers%2Fadam%2FCode%2Ftesteranto%2Fsrc%2FPM%2Fmain.ts%3A18%3A1394","lineNumber":7,"columnNumber":16}
9
9
  [{"url":"pptr:evaluate;file%3A%2F%2F%2FUsers%2Fadam%2FCode%2Ftesteranto%2Fsrc%2FPM%2Fmain.ts%3A18%3A1394","lineNumber":7,"columnNumber":16}]
@@ -1,5 +1,5 @@
1
1
  stderr > Starting inspector on 127.0.0.1:9229 failed: address already in use
2
- stdout > receiveTestResourceConfig {"name":"src/lib/classBuilder.test/classBuilder.test.ts","ports":[],"fs":"testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node","browserWSEndpoint":"ws://127.0.0.1:3234/devtools/browser/236f462e-9c19-482b-ba15-8755adc9ff18"}
2
+ stdout > receiveTestResourceConfig {"name":"src/lib/classBuilder.test/classBuilder.test.ts","ports":[],"fs":"testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node","browserWSEndpoint":"ws://127.0.0.1:3234/devtools/browser/ea71a8df-ab43-425d-b7af-5e8d7a8928d1"}
3
3
  stderr > Given error 1: ReferenceError: TestClassBuilder is not defined
4
4
  at Then.thenCB (file:///Users/adam/Code/testeranto/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs:572:32)
5
5
  at file:///Users/adam/Code/testeranto/testeranto/bundles/node/allTests/chunk-4NYHHJ7H.mjs:496:29
@@ -1,99 +0,0 @@
1
- "use strict";
2
- // import React, { useEffect, useState } from 'react';
3
- // import { useParams } from 'react-router-dom';
4
- // import { Alert, Badge } from 'react-bootstrap';
5
- // type BuildLogs = {
6
- // errors: string[];
7
- // warnings: string[];
8
- // inputs: Record<string, any>;
9
- // outputs: Record<string, any>;
10
- // };
11
- // export const BuildLogsPage = () => {
12
- // const { projectName, runtime } = useParams<{ projectName: string; runtime: string }>();
13
- // const [logs, setLogs] = useState<BuildLogs | null>(null);
14
- // const [loading, setLoading] = useState(true);
15
- // const [error, setError] = useState<string | null>(null);
16
- // useEffect(() => {
17
- // const fetchBuildLogs = async () => {
18
- // try {
19
- // // Mock data - replace with actual API call
20
- // const mockLogs: BuildLogs = {
21
- // errors: [
22
- // "Error: Could not resolve './someModule'",
23
- // "TypeError: Cannot read property 'map' of undefined"
24
- // ],
25
- // warnings: [
26
- // "Warning: Circular dependency detected",
27
- // "Warning: Unused import"
28
- // ],
29
- // inputs: {
30
- // "src/lib/index.ts": {
31
- // bytes: 3565,
32
- // imports: []
33
- // }
34
- // },
35
- // outputs: {
36
- // "dist/bundle.js": {
37
- // bytes: 12345
38
- // }
39
- // }
40
- // };
41
- // setLogs(mockLogs);
42
- // } catch (err) {
43
- // setError(err instanceof Error ? err.message : 'Unknown error');
44
- // } finally {
45
- // setLoading(false);
46
- // }
47
- // };
48
- // fetchBuildLogs();
49
- // }, [projectName, runtime]);
50
- // if (loading) return <div>Loading build logs...</div>;
51
- // if (error) return <Alert variant="danger">Error: {error}</Alert>;
52
- // return (
53
- // <div>
54
- // <h1>
55
- // Build Logs
56
- // <Badge bg="info" className="ms-2">{runtime}</Badge>
57
- // <Badge bg="secondary" className="ms-2">{projectName}</Badge>
58
- // </h1>
59
- // {logs ? (
60
- // <div>
61
- // <h2 className="mt-4">Errors</h2>
62
- // {logs.errors.length > 0 ? (
63
- // <div className="mb-4">
64
- // {logs.errors.map((err, i) => (
65
- // <Alert key={i} variant="danger" className="mb-2">
66
- // {err}
67
- // </Alert>
68
- // ))}
69
- // </div>
70
- // ) : (
71
- // <Alert variant="success">No errors found</Alert>
72
- // )}
73
- // <h2 className="mt-4">Warnings</h2>
74
- // {logs.warnings.length > 0 ? (
75
- // <div className="mb-4">
76
- // {logs.warnings.map((warn, i) => (
77
- // <Alert key={i} variant="warning" className="mb-2">
78
- // {warn}
79
- // </Alert>
80
- // ))}
81
- // </div>
82
- // ) : (
83
- // <Alert variant="success">No warnings found</Alert>
84
- // )}
85
- // <h2 className="mt-4">Input Files</h2>
86
- // <pre className="bg-light p-3">
87
- // {JSON.stringify(logs.inputs, null, 2)}
88
- // </pre>
89
- // <h2 className="mt-4">Output Files</h2>
90
- // <pre className="bg-light p-3">
91
- // {JSON.stringify(logs.outputs, null, 2)}
92
- // </pre>
93
- // </div>
94
- // ) : (
95
- // <Alert variant="warning">No build logs found</Alert>
96
- // )}
97
- // </div>
98
- // );
99
- // };
@@ -1,332 +0,0 @@
1
- "use strict";
2
- // /* eslint-disable @typescript-eslint/no-unused-vars */
3
- // import ReactDom from "react-dom/client";
4
- // import React, { useEffect, useState } from "react";
5
- // import { Col, Nav, Row, Tab, Table } from "react-bootstrap";
6
- // import { Footer } from "./Footer";
7
- // import { IBuiltConfig } from "./lib";
8
- // import { ISummary } from "./Types";
9
- // import { SettingsButton } from "./SettingsButton";
10
- // import SunriseAnimation from "./components/SunriseAnimation";
11
- // import "./Project.scss"
12
- // type ISummaries = [string, IBuiltConfig, ISummary][];
13
- // const BigBoard = () => {
14
- // const bigConfigElement = document.getElementById("bigConfig");
15
- // if (!bigConfigElement) throw new Error("bigConfig element not found");
16
- // const projects = JSON.parse(bigConfigElement.innerHTML) as string[];
17
- // const [summary, setSummary] = useState<ISummaries>();
18
- // const [nodeLogs, setNodeLogs] = useState<Record<string, string>>({});
19
- // const [webLogs, setWebLogs] = useState<Record<string, string>>({});
20
- // const [pureLogs, setPureLogs] = useState<Record<string, string>>({});
21
- // const [activeTab, setActiveTab] = useState<string>(() => {
22
- // const hash = window.location.hash.replace('#', '');
23
- // return hash || "node";
24
- // });
25
- // const fetchLogs = async (project: string) => {
26
- // try {
27
- // const [nodeRes, webRes, pureRes] = await Promise.all([
28
- // fetch(`./bundles/node/${project}/metafile.json`),
29
- // fetch(`./bundles/web/${project}/metafile.json`),
30
- // fetch(`./bundles/pure/${project}/metafile.json`),
31
- // ]);
32
- // setNodeLogs({ [project]: await nodeRes.json() });
33
- // setWebLogs({ [project]: await webRes.json() });
34
- // setPureLogs({ [project]: await pureRes.json() });
35
- // } catch (error) {
36
- // console.error("Error fetching logs:", error);
37
- // setNodeLogs({ [project]: "ERROR" });
38
- // setNodeLogs({ [project]: "ERROR" });
39
- // setNodeLogs({ [project]: "ERROR" });
40
- // }
41
- // };
42
- // useEffect(() => {
43
- // (async () => {
44
- // const x: Promise<[string, IBuiltConfig, ISummary]>[] = projects.map(
45
- // async (p) => {
46
- // fetchLogs(p);
47
- // return [
48
- // p,
49
- // (await (
50
- // await fetch(`./reports/config.json`)
51
- // ).json()) as IBuiltConfig,
52
- // (await (
53
- // await fetch(`./reports/${p}/summary.json`)
54
- // ).json()) as ISummary,
55
- // ] as [string, IBuiltConfig, ISummary];
56
- // }
57
- // );
58
- // Promise.all(x).then((v) => {
59
- // setSummary(v);
60
- // });
61
- // })();
62
- // }, []);
63
- // if (!summary || summary?.length === 0) {
64
- // return <div>loading...</div>;
65
- // }
66
- // return (
67
- // <div>
68
- // <SunriseAnimation active={false} />
69
- // <div className="container-fluid p-4" style={{ backgroundColor: 'transparent', position: 'relative', zIndex: 10 }}>
70
- // {/* Sky and sun elements */}
71
- // {/* <div id="sky"></div>
72
- // <div id="sun"></div>
73
- // <div id="sunDay"></div>
74
- // <div id="sunSet"></div>
75
- // <div id="horizon"></div>
76
- // <div id="water"></div>
77
- // <div id="waterReflectionContainer">
78
- // <div id="waterReflectionMiddle"></div>
79
- // </div> */}
80
- // <Tab.Container activeKey={activeTab} defaultActiveKey="node">
81
- // <nav className="navbar navbar-expand-lg navbar-light bg-light mb-3 rounded">
82
- // <div className="container-fluid">
83
- // <span className="navbar-brand text-muted">Project: testeranto</span>
84
- // <Nav variant="pills" className="me-auto" activeKey={activeTab} onSelect={(k) => {
85
- // setActiveTab(k || "node");
86
- // window.location.hash = k || "node";
87
- // }}>
88
- // <Nav.Item>
89
- // <Nav.Link eventKey="projects">Test Results</Nav.Link>
90
- // </Nav.Item>
91
- // <Nav.Item>
92
- // <Nav.Link
93
- // eventKey="node"
94
- // className={Object.values(nodeLogs).every(log => !log.errors || log.errors.length === 0)
95
- // ? "text-success"
96
- // : "text-danger"}
97
- // >
98
- // Node Build {Object.values(nodeLogs).every(log => !log.errors || log.errors.length === 0) ? "✅" : "❌"}
99
- // </Nav.Link>
100
- // </Nav.Item>
101
- // <Nav.Item>
102
- // <Nav.Link
103
- // eventKey="web"
104
- // className={Object.values(webLogs).every(log => !log.errors || log.errors.length === 0)
105
- // ? "text-success"
106
- // : "text-danger"}
107
- // >
108
- // Web Build {Object.values(webLogs).every(log => !log.errors || log.errors.length === 0) ? "✅" : "❌"}
109
- // </Nav.Link>
110
- // </Nav.Item>
111
- // <Nav.Item>
112
- // <Nav.Link
113
- // eventKey="pure"
114
- // className={Object.values(pureLogs).every(log => !log.errors || log.errors.length === 0)
115
- // ? "text-success"
116
- // : "text-danger"}
117
- // >
118
- // Pure Build {Object.values(pureLogs).every(log => !log.errors || log.errors.length === 0) ? "✅" : "❌"}
119
- // </Nav.Link>
120
- // </Nav.Item>
121
- // </Nav>
122
- // </div>
123
- // </nav>
124
- // <Row>
125
- // <Tab.Content>
126
- // <Tab.Pane eventKey="node">
127
- // {Object.keys(nodeLogs).length > 0 && (
128
- // <div className={`alert ${Object.values(nodeLogs).every(log => !log.errors || log.errors.length === 0)
129
- // ? 'alert-success'
130
- // : 'alert-danger'} d-flex justify-content-between align-items-center`}>
131
- // <span>
132
- // {Object.values(nodeLogs).every(log => !log.errors || log.errors.length === 0)
133
- // ? '✅ All Node builds passed successfully'
134
- // : '❌ Some Node builds failed'}
135
- // </span>
136
- // {!Object.values(nodeLogs).every(log => !log.errors || log.errors.length === 0) && (
137
- // <button
138
- // onClick={() => alert('AI debugger coming soon!')}
139
- // className="btn btn-sm btn-primary"
140
- // title="Get AI help debugging these build failures"
141
- // >
142
- // 🤖🪄✨
143
- // </button>
144
- // )}
145
- // </div>
146
- // )}
147
- // <pre >
148
- // {JSON.stringify(nodeLogs, null, 2)}
149
- // </pre>
150
- // </Tab.Pane>
151
- // <Tab.Pane eventKey="web">
152
- // {Object.keys(webLogs).length > 0 && (
153
- // <div className={`alert ${Object.values(webLogs).every(log => !log.errors || log.errors.length === 0)
154
- // ? 'alert-success'
155
- // : 'alert-danger'} d-flex justify-content-between align-items-center`}>
156
- // <span>
157
- // {Object.values(webLogs).every(log => !log.errors || log.errors.length === 0)
158
- // ? '✅ All Web builds passed successfully'
159
- // : '❌ Some Web builds failed'}
160
- // </span>
161
- // {!Object.values(webLogs).every(log => !log.errors || log.errors.length === 0) && (
162
- // <button
163
- // onClick={() => alert('AI debugger coming soon!')}
164
- // className="btn btn-sm btn-primary"
165
- // title="Get AI help debugging these build failures"
166
- // >
167
- // 🤖🪄✨
168
- // </button>
169
- // )}
170
- // </div>
171
- // )}
172
- // <pre >
173
- // {JSON.stringify(webLogs, null, 2)}
174
- // </pre>
175
- // </Tab.Pane>
176
- // <Tab.Pane eventKey="pure">
177
- // {Object.keys(pureLogs).length > 0 && (
178
- // <div className={`alert ${Object.values(pureLogs).every(log => !log.errors || log.errors.length === 0)
179
- // ? 'alert-success'
180
- // : 'alert-danger'} d-flex justify-content-between align-items-center`}>
181
- // <span>
182
- // {Object.values(pureLogs).every(log => !log.errors || log.errors.length === 0)
183
- // ? '✅ All Pure builds passed successfully'
184
- // : '❌ Some Pure builds failed'}
185
- // </span>
186
- // {!Object.values(pureLogs).every(log => !log.errors || log.errors.length === 0) && (
187
- // <button
188
- // onClick={() => alert('AI debugger coming soon!')}
189
- // className="btn btn-sm btn-primary"
190
- // title="Get AI help debugging these build failures"
191
- // >
192
- // 🤖🪄✨
193
- // </button>
194
- // )}
195
- // </div>
196
- // )}
197
- // <pre >
198
- // {JSON.stringify(pureLogs, null, 2)}
199
- // </pre>
200
- // </Tab.Pane>
201
- // <Tab.Pane eventKey="projects">
202
- // <Tab.Container defaultActiveKey={projects[0]}>
203
- // <Row>
204
- // <Col sm={3}>
205
- // <Nav variant="pills" className="flex-column">
206
- // {projects.map((project) => (
207
- // <Nav.Item key={project}>
208
- // <Nav.Link eventKey={project}>{project}</Nav.Link>
209
- // </Nav.Item>
210
- // ))}
211
- // </Nav>
212
- // </Col>
213
- // <Col sm={9}>
214
- // <Tab.Content>
215
- // {projects.map((project) => (
216
- // <Tab.Pane key={project} eventKey={project}>
217
- // <Table>
218
- // <Table>
219
- // <thead>
220
- // <tr>
221
- // <th>project</th>
222
- // <th>platform</th>
223
- // <th>BDD errors</th>
224
- // <th>Lint errors</th>
225
- // <th>Type errors</th>
226
- // </tr>
227
- // </thead>
228
- // <tbody>
229
- // {...summary.map((s) => {
230
- // return (
231
- // <>
232
- // <tr>
233
- // <th>{s[0]}</th>
234
- // </tr>
235
- // {...s[1].tests.map((t) => {
236
- // const x = `${s[0]}/${t[0]
237
- // .split(".")
238
- // .slice(0, -1)
239
- // .join(".")}/${t[1]}`;
240
- // const y = s[2][t[0]];
241
- // if (!y) return <pre>ERROR</pre>
242
- // return (
243
- // <tr>
244
- // <td>{t[0]}</td>
245
- // <td>
246
- // <button
247
- // className={`btn btn-sm ${(t[1] === "node" && nodeLogs[s[0]]?.errors?.length === 0) ||
248
- // (t[1] === "web" && webLogs[s[0]]?.errors?.length === 0) ||
249
- // (t[1] === "pure" && pureLogs[s[0]]?.errors?.length === 0)
250
- // ? "btn-outline-success"
251
- // : "btn-outline-danger"
252
- // }`}
253
- // onClick={() => {
254
- // const tabKey = t[1] === "node" ? "node" : t[1] === "web" ? "web" : "pure";
255
- // setActiveTab(tabKey);
256
- // }}
257
- // title={
258
- // (t[1] === "node" && nodeLogs[s[0]]?.errors?.length === 0) ||
259
- // (t[1] === "web" && webLogs[s[0]]?.errors?.length === 0) ||
260
- // (t[1] === "pure" && pureLogs[s[0]]?.errors?.length === 0)
261
- // ? "Build succeeded"
262
- // : "Build failed"
263
- // }
264
- // >
265
- // {t[1]}
266
- // {(t[1] === "node" && nodeLogs[s[0]]?.errors?.length === 0) ||
267
- // (t[1] === "web" && webLogs[s[0]]?.errors?.length === 0) ||
268
- // (t[1] === "pure" && pureLogs[s[0]]?.errors?.length === 0)
269
- // ? " ✅"
270
- // : " ❌"}
271
- // </button>
272
- // </td>
273
- // <td>
274
- // <a
275
- // href={`./reports/${x}/index.html`}
276
- // >
277
- // {
278
- // (y.runTimeErrors < 0) && "‼️ Tests did not complete"
279
- // }
280
- // {
281
- // y.runTimeErrors === 0 && "✅ All tests passed"
282
- // }
283
- // {
284
- // y.runTimeErrors > 0 && `⚠️ ${y.runTimeErrors} failures`
285
- // }
286
- // </a>
287
- // </td>
288
- // <td>
289
- // <a
290
- // href={`./reports/${x}/lint_errors.txt`}
291
- // >
292
- // {y.staticErrors}
293
- // </a>
294
- // </td>
295
- // <td>
296
- // <a
297
- // href={`./reports/${x}/type_errors.txt`}
298
- // >
299
- // {y.typeErrors}
300
- // </a>
301
- // </td>
302
- // </tr>
303
- // );
304
- // })}
305
- // </>
306
- // );
307
- // })}
308
- // </tbody>
309
- // </Table>
310
- // </Table>
311
- // </Tab.Pane>
312
- // ))}
313
- // </Tab.Content>
314
- // </Col>
315
- // </Row>
316
- // </Tab.Container>
317
- // </Tab.Pane>
318
- // </Tab.Content>
319
- // </Row>
320
- // </Tab.Container>
321
- // {/* disabled for now */}
322
- // {/* <SettingsButton className="gear-icon" /> */}
323
- // <Footer />
324
- // </div></div>
325
- // );
326
- // };
327
- // document.addEventListener("DOMContentLoaded", function () {
328
- // const elem = document.getElementById("root");
329
- // if (elem) {
330
- // ReactDom.createRoot(elem).render(React.createElement(BigBoard, {}));
331
- // }
332
- // });
@@ -1,108 +0,0 @@
1
- // import React, { useEffect, useState } from 'react';
2
- // import { useParams } from 'react-router-dom';
3
- // import { Alert, Badge } from 'react-bootstrap';
4
-
5
- // type BuildLogs = {
6
- // errors: string[];
7
- // warnings: string[];
8
- // inputs: Record<string, any>;
9
- // outputs: Record<string, any>;
10
- // };
11
-
12
- // export const BuildLogsPage = () => {
13
- // const { projectName, runtime } = useParams<{ projectName: string; runtime: string }>();
14
- // const [logs, setLogs] = useState<BuildLogs | null>(null);
15
- // const [loading, setLoading] = useState(true);
16
- // const [error, setError] = useState<string | null>(null);
17
-
18
- // useEffect(() => {
19
- // const fetchBuildLogs = async () => {
20
- // try {
21
- // // Mock data - replace with actual API call
22
- // const mockLogs: BuildLogs = {
23
- // errors: [
24
- // "Error: Could not resolve './someModule'",
25
- // "TypeError: Cannot read property 'map' of undefined"
26
- // ],
27
- // warnings: [
28
- // "Warning: Circular dependency detected",
29
- // "Warning: Unused import"
30
- // ],
31
- // inputs: {
32
- // "src/lib/index.ts": {
33
- // bytes: 3565,
34
- // imports: []
35
- // }
36
- // },
37
- // outputs: {
38
- // "dist/bundle.js": {
39
- // bytes: 12345
40
- // }
41
- // }
42
- // };
43
- // setLogs(mockLogs);
44
- // } catch (err) {
45
- // setError(err instanceof Error ? err.message : 'Unknown error');
46
- // } finally {
47
- // setLoading(false);
48
- // }
49
- // };
50
-
51
- // fetchBuildLogs();
52
- // }, [projectName, runtime]);
53
-
54
- // if (loading) return <div>Loading build logs...</div>;
55
- // if (error) return <Alert variant="danger">Error: {error}</Alert>;
56
-
57
- // return (
58
- // <div>
59
- // <h1>
60
- // Build Logs
61
- // <Badge bg="info" className="ms-2">{runtime}</Badge>
62
- // <Badge bg="secondary" className="ms-2">{projectName}</Badge>
63
- // </h1>
64
-
65
- // {logs ? (
66
- // <div>
67
- // <h2 className="mt-4">Errors</h2>
68
- // {logs.errors.length > 0 ? (
69
- // <div className="mb-4">
70
- // {logs.errors.map((err, i) => (
71
- // <Alert key={i} variant="danger" className="mb-2">
72
- // {err}
73
- // </Alert>
74
- // ))}
75
- // </div>
76
- // ) : (
77
- // <Alert variant="success">No errors found</Alert>
78
- // )}
79
-
80
- // <h2 className="mt-4">Warnings</h2>
81
- // {logs.warnings.length > 0 ? (
82
- // <div className="mb-4">
83
- // {logs.warnings.map((warn, i) => (
84
- // <Alert key={i} variant="warning" className="mb-2">
85
- // {warn}
86
- // </Alert>
87
- // ))}
88
- // </div>
89
- // ) : (
90
- // <Alert variant="success">No warnings found</Alert>
91
- // )}
92
-
93
- // <h2 className="mt-4">Input Files</h2>
94
- // <pre className="bg-light p-3">
95
- // {JSON.stringify(logs.inputs, null, 2)}
96
- // </pre>
97
-
98
- // <h2 className="mt-4">Output Files</h2>
99
- // <pre className="bg-light p-3">
100
- // {JSON.stringify(logs.outputs, null, 2)}
101
- // </pre>
102
- // </div>
103
- // ) : (
104
- // <Alert variant="warning">No build logs found</Alert>
105
- // )}
106
- // </div>
107
- // );
108
- // };