testeranto 0.167.0 → 0.172.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.
- package/dist/common/src/NavBar.js +45 -0
- package/dist/common/src/PM/main.js +81 -59
- package/dist/common/src/Pure.js +16 -14
- package/dist/common/src/ReportServer.js +48 -5
- package/dist/common/src/Web.js +35 -20
- package/dist/common/src/components/SunriseAnimation.test/implementation.js +1 -0
- package/dist/common/src/components/SunriseAnimation.test/index.js +1 -0
- package/dist/common/src/components/SunriseAnimation.test/interface.js +1 -0
- package/dist/common/src/components/SunriseAnimation.test/specification.js +1 -0
- package/dist/common/src/components/TestStatusBadge.js +55 -0
- package/dist/common/src/components/pure/ProjectPageView.js +204 -0
- package/dist/common/src/components/pure/ProjectPageView.test/adapter.js +20 -0
- package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +71 -0
- package/dist/common/src/components/pure/ProjectPageView.test/index.js +10 -0
- package/dist/common/src/components/pure/ProjectPageView.test/specification.js +19 -0
- package/dist/common/src/components/pure/ProjectPageView.test/types.js +2 -0
- package/dist/common/src/lib/BaseSuite.js +3 -3
- package/dist/common/src/lib/BaseSuite.test/test.js +1 -1
- package/dist/common/src/lib/abstractBase.js +41 -14
- package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +1 -1
- package/dist/common/src/lib/pmProxy.js +185 -64
- package/dist/common/testeranto.config.js +6 -0
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/App.js +3 -3
- package/dist/module/src/PM/main.js +81 -59
- package/dist/module/src/ProjectsPage.js +1 -110
- package/dist/module/src/Pure.js +16 -14
- package/dist/module/src/ReportServer.js +48 -5
- package/dist/module/src/TestPage.js +45 -16
- package/dist/module/src/Web.js +35 -20
- package/dist/module/src/components/SunriseAnimation.test/implementation.js +1 -0
- package/dist/module/src/components/SunriseAnimation.test/index.js +1 -0
- package/dist/module/src/components/SunriseAnimation.test/interface.js +1 -0
- package/dist/module/src/components/SunriseAnimation.test/specification.js +1 -0
- package/dist/module/src/components/pure/ProjectPageView.js +197 -0
- package/dist/module/src/components/pure/ProjectPageView.test/adapter.js +17 -0
- package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +68 -0
- package/dist/module/src/components/pure/ProjectPageView.test/index.js +5 -0
- package/dist/module/src/components/pure/ProjectPageView.test/specification.js +15 -0
- package/dist/module/src/components/pure/ProjectPageView.test/types.js +1 -0
- package/dist/module/src/components/pure/ProjectsPageView.js +58 -0
- package/dist/module/src/components/pure/TestPageView.js +136 -0
- package/dist/module/src/components/stateful/ProjectPage.js +63 -0
- package/dist/module/src/components/stateful/ProjectsPage.js +55 -0
- package/dist/module/src/components/stateful/TestPage.js +82 -0
- package/dist/module/src/lib/BaseSuite.js +3 -3
- package/dist/module/src/lib/BaseSuite.test/test.js +1 -1
- package/dist/module/src/lib/abstractBase.js +41 -14
- package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +1 -1
- package/dist/module/src/lib/pmProxy.js +185 -64
- package/dist/module/testeranto.config.js +6 -0
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/App.css +13 -9
- package/dist/prebuild/App.js +600 -551
- package/dist/prebuild/ReportServer.mjs +44 -4
- package/dist/prebuild/run.mjs +67 -39
- package/dist/types/src/NavBar.d.ts +19 -0
- package/dist/types/src/PM/index.d.ts +3 -1
- package/dist/types/src/PM/main.d.ts +0 -4
- package/dist/types/src/PM/node.d.ts +2 -2
- package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +0 -0
- package/dist/types/src/components/SunriseAnimation.test/specification.d.ts +0 -0
- package/dist/types/src/components/TestStatusBadge.d.ts +15 -0
- package/dist/types/src/components/pure/ProjectPageView.d.ts +14 -0
- package/dist/types/src/components/pure/ProjectPageView.test/adapter.d.ts +3 -0
- package/dist/types/src/components/pure/ProjectPageView.test/implementation.d.ts +3 -0
- package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +2 -0
- package/dist/types/src/components/pure/ProjectPageView.test/specification.d.ts +3 -0
- package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +39 -0
- package/dist/types/src/lib/BaseSuite.d.ts +2 -0
- package/dist/types/src/lib/abstractBase.d.ts +12 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/src/App.tsx +5 -9
- package/src/PM/index.ts +1 -1
- package/src/PM/main.ts +87 -82
- package/src/PM/node.ts +2 -2
- package/src/ProjectsPage.tsx +1 -164
- package/src/Pure.ts +16 -16
- package/src/ReportServer.ts +49 -6
- package/src/TestPage.tsx +78 -5
- package/src/Web.ts +35 -35
- package/src/components/SunriseAnimation.test/implementation.ts +0 -0
- package/src/components/SunriseAnimation.test/index.ts +0 -0
- package/src/components/SunriseAnimation.test/interface.ts +0 -0
- package/src/components/SunriseAnimation.test/specification.ts +0 -0
- package/src/components/pure/ProjectPageView.test/adapter.ts +21 -0
- package/src/components/pure/ProjectPageView.test/implementation.tsx +84 -0
- package/src/components/pure/ProjectPageView.test/index.ts +8 -0
- package/src/components/pure/ProjectPageView.test/specification.ts +31 -0
- package/src/components/pure/ProjectPageView.test/types.ts +55 -0
- package/src/components/pure/ProjectPageView.tsx +332 -0
- package/src/components/pure/ProjectsPageView.tsx +99 -0
- package/src/components/pure/TestPageView.tsx +278 -0
- package/src/components/stateful/ProjectPage.tsx +83 -0
- package/src/components/stateful/ProjectsPage.tsx +73 -0
- package/src/components/stateful/TestPage.tsx +107 -0
- package/src/lib/BaseSuite.test/test.ts +1 -1
- package/src/lib/BaseSuite.ts +9 -4
- package/src/lib/abstractBase.ts +45 -14
- package/src/lib/baseBuilder.test/baseBuilder.test.adapter.ts +1 -1
- package/src/lib/pmProxy.ts +184 -87
- package/testeranto/App.css +13 -9
- package/testeranto/App.js +600 -551
- package/testeranto/bundles/node/allTests/{chunk-4ONUZRZ4.mjs → chunk-3EUGBAOM.mjs} +1 -1
- package/testeranto/bundles/node/allTests/{chunk-IDCUSTSM.mjs → chunk-E75CSRER.mjs} +246 -115
- package/testeranto/bundles/node/allTests/{chunk-NQEP7SN4.mjs → chunk-M6DO7VMB.mjs} +1 -1
- package/testeranto/bundles/node/allTests/metafile.json +37 -37
- package/testeranto/bundles/node/allTests/src/lib/BaseSuite.test/node.test.mjs +4 -4
- package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +3 -3
- package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +3 -3
- package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +2 -17
- package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +354 -252
- package/testeranto/bundles/pure/allTests/{chunk-5SBJWHSZ.mjs → chunk-KHDVEHF7.mjs} +2 -17
- package/testeranto/bundles/pure/allTests/{chunk-4ULDTZFU.mjs → chunk-VMUSFSZM.mjs} +246 -115
- package/testeranto/bundles/pure/allTests/metafile.json +72 -42
- package/testeranto/bundles/pure/allTests/src/Pure.test.mjs +2 -2
- package/testeranto/bundles/pure/allTests/src/lib/BaseSuite.test/pure.test.mjs +3 -3
- package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +2 -29
- package/testeranto/bundles/web/allTests/chunk-HPYA4YZC.mjs +2283 -0
- package/testeranto/bundles/web/allTests/{chunk-46E6YGGN.mjs → chunk-U7AW26HL.mjs} +292 -142
- package/testeranto/bundles/web/allTests/metafile.json +22 -943
- package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.html +19 -0
- package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.mjs +37524 -0
- package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +20 -2
- package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +26 -2
- package/testeranto/reports/allTests/config.json +8 -0
- package/testeranto/reports/allTests/src/Pure.test/pure/type_errors.txt +9 -3
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/bdd_errors.txt +1 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +13 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/logs.txt +50 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/message.txt +2 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/prompt.txt +17 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/tests.json +32 -0
- package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +68 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +22 -39
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/tests.json +6 -3
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +8 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/tests.json +6 -3
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +9 -3
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +66 -55
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +2 -2
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/tests.json +6 -3
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +10 -5
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +16 -48
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +18 -9
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +8 -1
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +10 -5
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +62 -33
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +2 -2
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +18 -9
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +10 -5
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +37 -50
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/tests.json +36 -18
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +8 -1
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/logs.txt +2 -2
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/type_errors.txt +9 -3
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +28 -43
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/tests.json +28 -14
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +8 -1
- package/testeranto/reports/allTests/summary.json +15 -8
- package/testeranto/reportsnode_build_errors +20 -0
- package/testeranto/reportspure_build_errors +343 -0
- package/testeranto/reportsweb_build_errors +25 -0
- package/testeranto.config.ts +7 -0
- package/tsc.log +100 -26
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/testeranto/bundles/node/allTests/chunk-FFBRDUBH.mjs +0 -677
- package/testeranto/bundles/node/allTests/chunk-H2IBV7SY.mjs +0 -113
- package/testeranto/bundles/node/allTests/chunk-ZHOULXPN.mjs +0 -252
- package/testeranto/bundles/pure/allTests/chunk-CSMXYJ65.mjs +0 -200
- package/testeranto/bundles/pure/allTests/chunk-QK4IXLF6.mjs +0 -674
- package/testeranto/bundles/web/allTests/chunk-TU3MJSSI.mjs +0 -855
- package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test/manifest.json +0 -1
- package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/manifest.json +0 -1
- package/testeranto/reports/allTests/src/Pure.test/pure/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/manifest.json +0 -1
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/manifest.json +0 -1
- /package/{testeranto/reports/allTests/src/Pure.test/pure/logs.txt → dist/types/src/components/SunriseAnimation.test/implementation.d.ts} +0 -0
- /package/{testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/logs.txt → dist/types/src/components/SunriseAnimation.test/index.d.ts} +0 -0
package/testeranto/App.js
CHANGED
|
@@ -2383,9 +2383,9 @@
|
|
|
2383
2383
|
if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function") {
|
|
2384
2384
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
|
|
2385
2385
|
}
|
|
2386
|
-
var
|
|
2386
|
+
var React90 = require_react();
|
|
2387
2387
|
var Scheduler = require_scheduler();
|
|
2388
|
-
var ReactSharedInternals =
|
|
2388
|
+
var ReactSharedInternals = React90.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
2389
2389
|
var suppressWarning = false;
|
|
2390
2390
|
function setSuppressWarning(newSuppressWarning) {
|
|
2391
2391
|
{
|
|
@@ -3990,7 +3990,7 @@
|
|
|
3990
3990
|
{
|
|
3991
3991
|
if (props.value == null) {
|
|
3992
3992
|
if (typeof props.children === "object" && props.children !== null) {
|
|
3993
|
-
|
|
3993
|
+
React90.Children.forEach(props.children, function(child) {
|
|
3994
3994
|
if (child == null) {
|
|
3995
3995
|
return;
|
|
3996
3996
|
}
|
|
@@ -12437,7 +12437,7 @@
|
|
|
12437
12437
|
}
|
|
12438
12438
|
}
|
|
12439
12439
|
var fakeInternalInstance = {};
|
|
12440
|
-
var emptyRefsObject = new
|
|
12440
|
+
var emptyRefsObject = new React90.Component().refs;
|
|
12441
12441
|
var didWarnAboutStateAssignmentForComponent;
|
|
12442
12442
|
var didWarnAboutUninitializedState;
|
|
12443
12443
|
var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;
|
|
@@ -23609,7 +23609,7 @@
|
|
|
23609
23609
|
if (true) {
|
|
23610
23610
|
(function() {
|
|
23611
23611
|
"use strict";
|
|
23612
|
-
var
|
|
23612
|
+
var React90 = require_react();
|
|
23613
23613
|
var REACT_ELEMENT_TYPE = Symbol.for("react.element");
|
|
23614
23614
|
var REACT_PORTAL_TYPE = Symbol.for("react.portal");
|
|
23615
23615
|
var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
|
|
@@ -23635,7 +23635,7 @@
|
|
|
23635
23635
|
}
|
|
23636
23636
|
return null;
|
|
23637
23637
|
}
|
|
23638
|
-
var ReactSharedInternals =
|
|
23638
|
+
var ReactSharedInternals = React90.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
23639
23639
|
function error(format) {
|
|
23640
23640
|
{
|
|
23641
23641
|
{
|
|
@@ -25317,10 +25317,10 @@
|
|
|
25317
25317
|
});
|
|
25318
25318
|
|
|
25319
25319
|
// src/App.tsx
|
|
25320
|
-
var
|
|
25320
|
+
var import_react66 = __toESM(require_react(), 1);
|
|
25321
25321
|
var import_client = __toESM(require_client(), 1);
|
|
25322
25322
|
|
|
25323
|
-
// node_modules/react-router/dist/development/chunk-
|
|
25323
|
+
// node_modules/react-router/dist/development/chunk-C37GKA54.mjs
|
|
25324
25324
|
var React = __toESM(require_react(), 1);
|
|
25325
25325
|
var React2 = __toESM(require_react(), 1);
|
|
25326
25326
|
var React3 = __toESM(require_react(), 1);
|
|
@@ -26302,68 +26302,71 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
26302
26302
|
}
|
|
26303
26303
|
}
|
|
26304
26304
|
}
|
|
26305
|
-
return renderedMatches.reduceRight(
|
|
26306
|
-
|
|
26307
|
-
|
|
26308
|
-
|
|
26309
|
-
|
|
26310
|
-
|
|
26311
|
-
|
|
26312
|
-
|
|
26313
|
-
|
|
26314
|
-
if (
|
|
26315
|
-
|
|
26316
|
-
|
|
26317
|
-
|
|
26318
|
-
|
|
26319
|
-
|
|
26320
|
-
|
|
26321
|
-
|
|
26322
|
-
|
|
26323
|
-
|
|
26324
|
-
|
|
26305
|
+
return renderedMatches.reduceRight(
|
|
26306
|
+
(outlet, match, index) => {
|
|
26307
|
+
let error;
|
|
26308
|
+
let shouldRenderHydrateFallback = false;
|
|
26309
|
+
let errorElement = null;
|
|
26310
|
+
let hydrateFallbackElement = null;
|
|
26311
|
+
if (dataRouterState) {
|
|
26312
|
+
error = errors && match.route.id ? errors[match.route.id] : void 0;
|
|
26313
|
+
errorElement = match.route.errorElement || defaultErrorElement;
|
|
26314
|
+
if (renderFallback) {
|
|
26315
|
+
if (fallbackIndex < 0 && index === 0) {
|
|
26316
|
+
warningOnce(
|
|
26317
|
+
"route-fallback",
|
|
26318
|
+
false,
|
|
26319
|
+
"No `HydrateFallback` element provided to render during initial hydration"
|
|
26320
|
+
);
|
|
26321
|
+
shouldRenderHydrateFallback = true;
|
|
26322
|
+
hydrateFallbackElement = null;
|
|
26323
|
+
} else if (fallbackIndex === index) {
|
|
26324
|
+
shouldRenderHydrateFallback = true;
|
|
26325
|
+
hydrateFallbackElement = match.route.hydrateFallbackElement || null;
|
|
26326
|
+
}
|
|
26325
26327
|
}
|
|
26326
26328
|
}
|
|
26327
|
-
|
|
26328
|
-
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26335
|
-
|
|
26336
|
-
|
|
26337
|
-
|
|
26338
|
-
|
|
26339
|
-
|
|
26340
|
-
children = outlet;
|
|
26341
|
-
}
|
|
26342
|
-
return /* @__PURE__ */ React2.createElement(
|
|
26343
|
-
RenderedRoute,
|
|
26344
|
-
{
|
|
26345
|
-
match,
|
|
26346
|
-
routeContext: {
|
|
26347
|
-
outlet,
|
|
26348
|
-
matches: matches2,
|
|
26349
|
-
isDataRoute: dataRouterState != null
|
|
26350
|
-
},
|
|
26351
|
-
children
|
|
26329
|
+
let matches2 = parentMatches.concat(renderedMatches.slice(0, index + 1));
|
|
26330
|
+
let getChildren = () => {
|
|
26331
|
+
let children;
|
|
26332
|
+
if (error) {
|
|
26333
|
+
children = errorElement;
|
|
26334
|
+
} else if (shouldRenderHydrateFallback) {
|
|
26335
|
+
children = hydrateFallbackElement;
|
|
26336
|
+
} else if (match.route.Component) {
|
|
26337
|
+
children = /* @__PURE__ */ React2.createElement(match.route.Component, null);
|
|
26338
|
+
} else if (match.route.element) {
|
|
26339
|
+
children = match.route.element;
|
|
26340
|
+
} else {
|
|
26341
|
+
children = outlet;
|
|
26352
26342
|
}
|
|
26353
|
-
|
|
26354
|
-
|
|
26355
|
-
|
|
26356
|
-
|
|
26357
|
-
|
|
26358
|
-
|
|
26359
|
-
|
|
26360
|
-
|
|
26361
|
-
|
|
26362
|
-
|
|
26363
|
-
|
|
26364
|
-
|
|
26365
|
-
|
|
26366
|
-
|
|
26343
|
+
return /* @__PURE__ */ React2.createElement(
|
|
26344
|
+
RenderedRoute,
|
|
26345
|
+
{
|
|
26346
|
+
match,
|
|
26347
|
+
routeContext: {
|
|
26348
|
+
outlet,
|
|
26349
|
+
matches: matches2,
|
|
26350
|
+
isDataRoute: dataRouterState != null
|
|
26351
|
+
},
|
|
26352
|
+
children
|
|
26353
|
+
}
|
|
26354
|
+
);
|
|
26355
|
+
};
|
|
26356
|
+
return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /* @__PURE__ */ React2.createElement(
|
|
26357
|
+
RenderErrorBoundary,
|
|
26358
|
+
{
|
|
26359
|
+
location: dataRouterState.location,
|
|
26360
|
+
revalidation: dataRouterState.revalidation,
|
|
26361
|
+
component: errorElement,
|
|
26362
|
+
error,
|
|
26363
|
+
children: getChildren(),
|
|
26364
|
+
routeContext: { outlet: null, matches: matches2, isDataRoute: true }
|
|
26365
|
+
}
|
|
26366
|
+
) : getChildren();
|
|
26367
|
+
},
|
|
26368
|
+
null
|
|
26369
|
+
);
|
|
26367
26370
|
}
|
|
26368
26371
|
function getDataRouterConsoleError(hookName) {
|
|
26369
26372
|
return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;
|
|
@@ -26473,7 +26476,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
26473
26476
|
}) {
|
|
26474
26477
|
return useRoutesImpl(routes, void 0, state, future);
|
|
26475
26478
|
}
|
|
26476
|
-
function Route(
|
|
26479
|
+
function Route(props) {
|
|
26477
26480
|
invariant(
|
|
26478
26481
|
false,
|
|
26479
26482
|
`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`
|
|
@@ -26964,10 +26967,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
26964
26967
|
}
|
|
26965
26968
|
};
|
|
26966
26969
|
}
|
|
26967
|
-
function PrefetchPageLinks({
|
|
26968
|
-
page,
|
|
26969
|
-
...dataLinkProps
|
|
26970
|
-
}) {
|
|
26970
|
+
function PrefetchPageLinks({ page, ...linkProps }) {
|
|
26971
26971
|
let { router } = useDataRouterContext2();
|
|
26972
26972
|
let matches = React8.useMemo(
|
|
26973
26973
|
() => matchRoutes(router.routes, page, router.basename),
|
|
@@ -26976,7 +26976,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
26976
26976
|
if (!matches) {
|
|
26977
26977
|
return null;
|
|
26978
26978
|
}
|
|
26979
|
-
return /* @__PURE__ */ React8.createElement(PrefetchPageLinksImpl, { page, matches, ...
|
|
26979
|
+
return /* @__PURE__ */ React8.createElement(PrefetchPageLinksImpl, { page, matches, ...linkProps });
|
|
26980
26980
|
}
|
|
26981
26981
|
function useKeyedPrefetchLinks(matches) {
|
|
26982
26982
|
let { manifest, routeModules } = useFrameworkContext();
|
|
@@ -27093,7 +27093,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
27093
27093
|
try {
|
|
27094
27094
|
if (isBrowser) {
|
|
27095
27095
|
window.__reactRouterVersion = // @ts-expect-error
|
|
27096
|
-
"7.7.
|
|
27096
|
+
"7.7.1";
|
|
27097
27097
|
}
|
|
27098
27098
|
} catch (e) {
|
|
27099
27099
|
}
|
|
@@ -27659,7 +27659,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
27659
27659
|
};
|
|
27660
27660
|
}, [callback, capture]);
|
|
27661
27661
|
}
|
|
27662
|
-
function useViewTransitionState(to,
|
|
27662
|
+
function useViewTransitionState(to, { relative } = {}) {
|
|
27663
27663
|
let vtContext = React10.useContext(ViewTransitionContext);
|
|
27664
27664
|
invariant(
|
|
27665
27665
|
vtContext != null,
|
|
@@ -27669,7 +27669,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
27669
27669
|
"useViewTransitionState"
|
|
27670
27670
|
/* useViewTransitionState */
|
|
27671
27671
|
);
|
|
27672
|
-
let path = useResolvedPath(to, { relative
|
|
27672
|
+
let path = useResolvedPath(to, { relative });
|
|
27673
27673
|
if (!vtContext.isTransitioning) {
|
|
27674
27674
|
return false;
|
|
27675
27675
|
}
|
|
@@ -27681,8 +27681,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
27681
27681
|
// node_modules/react-router/dist/development/index.mjs
|
|
27682
27682
|
"use client";
|
|
27683
27683
|
|
|
27684
|
-
// src/
|
|
27685
|
-
var
|
|
27684
|
+
// src/components/stateful/TestPage.tsx
|
|
27685
|
+
var import_react59 = __toESM(require_react(), 1);
|
|
27686
|
+
|
|
27687
|
+
// src/components/pure/TestPageView.tsx
|
|
27688
|
+
var import_react58 = __toESM(require_react(), 1);
|
|
27686
27689
|
|
|
27687
27690
|
// node_modules/@babel/runtime/helpers/esm/extends.js
|
|
27688
27691
|
function _extends() {
|
|
@@ -32124,118 +32127,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32124
32127
|
})), rightContent && /* @__PURE__ */ import_react56.default.createElement(Nav_default2, null, rightContent))));
|
|
32125
32128
|
};
|
|
32126
32129
|
|
|
32127
|
-
// src/ProjectsPage.tsx
|
|
32128
|
-
var ProjectsPage = () => {
|
|
32129
|
-
const [projects, setProjects] = (0, import_react57.useState)([]);
|
|
32130
|
-
const [summaries, setSummaries] = (0, import_react57.useState)({});
|
|
32131
|
-
const [loading, setLoading] = (0, import_react57.useState)(true);
|
|
32132
|
-
const [error, setError] = (0, import_react57.useState)(null);
|
|
32133
|
-
const navigate = useNavigate();
|
|
32134
|
-
const [configs, setConfigs] = (0, import_react57.useState)({});
|
|
32135
|
-
(0, import_react57.useEffect)(() => {
|
|
32136
|
-
const fetchProjects = async () => {
|
|
32137
|
-
try {
|
|
32138
|
-
const projectsRes = await fetch(`projects.json`);
|
|
32139
|
-
const projectNames = await projectsRes.json();
|
|
32140
|
-
const projectsData = await Promise.all(
|
|
32141
|
-
projectNames.map(async (name) => {
|
|
32142
|
-
const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
|
|
32143
|
-
fetch(`reports/${name}/summary.json`),
|
|
32144
|
-
fetch(`bundles/node/${name}/metafile.json`),
|
|
32145
|
-
fetch(`bundles/web/${name}/metafile.json`),
|
|
32146
|
-
fetch(`bundles/pure/${name}/metafile.json`),
|
|
32147
|
-
fetch(`reports/${name}/config.json`)
|
|
32148
|
-
]);
|
|
32149
|
-
const [summary, nodeData, webData, pureData, configData] = await Promise.all([
|
|
32150
|
-
summaryRes.json(),
|
|
32151
|
-
nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
|
|
32152
|
-
webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
|
|
32153
|
-
pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
|
|
32154
|
-
configRes.json()
|
|
32155
|
-
]);
|
|
32156
|
-
setSummaries((prev) => ({ ...prev, [name]: summary }));
|
|
32157
|
-
setConfigs((prev) => ({ ...prev, [name]: configData }));
|
|
32158
|
-
return {
|
|
32159
|
-
name,
|
|
32160
|
-
testCount: Object.keys(summary).length,
|
|
32161
|
-
nodeStatus: nodeData.errors?.length ? "failed" : nodeData.warnings?.length ? "warning" : "success",
|
|
32162
|
-
webStatus: webData.errors?.length ? "failed" : webData.warnings?.length ? "warning" : "success",
|
|
32163
|
-
pureStatus: pureData.errors?.length ? "failed" : pureData.warnings?.length ? "warning" : "success",
|
|
32164
|
-
config: Object.keys(configData).length
|
|
32165
|
-
};
|
|
32166
|
-
})
|
|
32167
|
-
);
|
|
32168
|
-
setProjects(projectsData);
|
|
32169
|
-
} catch (err) {
|
|
32170
|
-
setError(err instanceof Error ? err.message : "Unknown error");
|
|
32171
|
-
} finally {
|
|
32172
|
-
setLoading(false);
|
|
32173
|
-
}
|
|
32174
|
-
};
|
|
32175
|
-
fetchProjects();
|
|
32176
|
-
}, []);
|
|
32177
|
-
const getStatusIcon = (status) => {
|
|
32178
|
-
switch (status) {
|
|
32179
|
-
case "success":
|
|
32180
|
-
return "\u2705";
|
|
32181
|
-
case "failed":
|
|
32182
|
-
return "\u274C";
|
|
32183
|
-
case "warning":
|
|
32184
|
-
return "\u26A0\uFE0F";
|
|
32185
|
-
default:
|
|
32186
|
-
return "\u2753";
|
|
32187
|
-
}
|
|
32188
|
-
};
|
|
32189
|
-
if (loading)
|
|
32190
|
-
return /* @__PURE__ */ import_react57.default.createElement("div", null, "Loading projects...");
|
|
32191
|
-
if (error)
|
|
32192
|
-
return /* @__PURE__ */ import_react57.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
|
|
32193
|
-
console.log(configs);
|
|
32194
|
-
return /* @__PURE__ */ import_react57.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react57.default.createElement(NavBar, { title: "Testeranto", backLink: null }), /* @__PURE__ */ import_react57.default.createElement(Table_default, { striped: true, bordered: true, hover: true, responsive: true }, /* @__PURE__ */ import_react57.default.createElement("thead", null, /* @__PURE__ */ import_react57.default.createElement("tr", null, /* @__PURE__ */ import_react57.default.createElement("th", null, "Project"), /* @__PURE__ */ import_react57.default.createElement("th", null, "Tests"), /* @__PURE__ */ import_react57.default.createElement("th", null, "Node"), /* @__PURE__ */ import_react57.default.createElement("th", null, "Web"), /* @__PURE__ */ import_react57.default.createElement("th", null, "Pure"))), /* @__PURE__ */ import_react57.default.createElement("tbody", null, projects.map((project) => /* @__PURE__ */ import_react57.default.createElement("tr", { key: project.name }, /* @__PURE__ */ import_react57.default.createElement("td", null, /* @__PURE__ */ import_react57.default.createElement("a", { href: "#", onClick: (e) => {
|
|
32195
|
-
e.preventDefault();
|
|
32196
|
-
navigate(`/projects/${project.name}`);
|
|
32197
|
-
} }, project.name)), /* @__PURE__ */ import_react57.default.createElement("td", null, /* @__PURE__ */ import_react57.default.createElement("div", { style: { maxHeight: "200px", overflowY: "auto" } }, summaries[project.name] ? Object.keys(summaries[project.name]).map((testName2) => {
|
|
32198
|
-
const testData = summaries[project.name][testName2];
|
|
32199
|
-
const runTime = configs[project.name].tests.find((t) => t[0] === testName2)[1];
|
|
32200
|
-
const hasRuntimeErrors = testData.runTimeErrors > 0;
|
|
32201
|
-
const hasStaticErrors = testData.typeErrors > 0 || testData.staticErrors > 0;
|
|
32202
|
-
return /* @__PURE__ */ import_react57.default.createElement("div", { key: testName2 }, /* @__PURE__ */ import_react57.default.createElement(
|
|
32203
|
-
"a",
|
|
32204
|
-
{
|
|
32205
|
-
href: `#/projects/${project.name}/tests/${encodeURIComponent(testName2)}/${runTime}`
|
|
32206
|
-
},
|
|
32207
|
-
hasRuntimeErrors ? "\u274C " : hasStaticErrors ? "\u26A0\uFE0F " : "",
|
|
32208
|
-
testName2.split("/").pop()
|
|
32209
|
-
));
|
|
32210
|
-
}) : /* @__PURE__ */ import_react57.default.createElement("div", null, "Loading tests..."))), /* @__PURE__ */ import_react57.default.createElement("td", null, /* @__PURE__ */ import_react57.default.createElement(
|
|
32211
|
-
"a",
|
|
32212
|
-
{
|
|
32213
|
-
href: `#/projects/${project.name}#node`
|
|
32214
|
-
},
|
|
32215
|
-
getStatusIcon(project.nodeStatus),
|
|
32216
|
-
" Node build logs"
|
|
32217
|
-
)), /* @__PURE__ */ import_react57.default.createElement("td", null, /* @__PURE__ */ import_react57.default.createElement(
|
|
32218
|
-
"a",
|
|
32219
|
-
{
|
|
32220
|
-
href: `#/projects/${project.name}#web`
|
|
32221
|
-
},
|
|
32222
|
-
getStatusIcon(project.webStatus),
|
|
32223
|
-
" Web build logs"
|
|
32224
|
-
)), /* @__PURE__ */ import_react57.default.createElement("td", null, /* @__PURE__ */ import_react57.default.createElement(
|
|
32225
|
-
"a",
|
|
32226
|
-
{
|
|
32227
|
-
href: `#/projects/${project.name}#pure`
|
|
32228
|
-
},
|
|
32229
|
-
getStatusIcon(project.pureStatus),
|
|
32230
|
-
" Pure build logs"
|
|
32231
|
-
)))))));
|
|
32232
|
-
};
|
|
32233
|
-
|
|
32234
|
-
// src/ProjectPage.tsx
|
|
32235
|
-
var import_react59 = __toESM(require_react(), 1);
|
|
32236
|
-
|
|
32237
32130
|
// src/components/TestStatusBadge.tsx
|
|
32238
|
-
var
|
|
32131
|
+
var import_react57 = __toESM(require_react(), 1);
|
|
32239
32132
|
var TestStatusBadge = (props) => {
|
|
32240
32133
|
console.groupCollapsed(`[TestStatusBadge] Rendering for ${props.testName}`);
|
|
32241
32134
|
console.log("Raw props:", JSON.parse(JSON.stringify(props)));
|
|
@@ -32266,7 +32159,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32266
32159
|
if (props.variant === "compact") {
|
|
32267
32160
|
console.log("Rendering compact badge:", bddStatus);
|
|
32268
32161
|
console.groupEnd();
|
|
32269
|
-
return /* @__PURE__ */
|
|
32162
|
+
return /* @__PURE__ */ import_react57.default.createElement(Badge_default, { bg: bddStatus.variant }, bddStatus.text);
|
|
32270
32163
|
}
|
|
32271
32164
|
console.log("Rendering full badge set with:", {
|
|
32272
32165
|
bddStatus,
|
|
@@ -32274,186 +32167,149 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32274
32167
|
staticErrors: props.staticErrors
|
|
32275
32168
|
});
|
|
32276
32169
|
console.groupEnd();
|
|
32277
|
-
return /* @__PURE__ */
|
|
32170
|
+
return /* @__PURE__ */ import_react57.default.createElement("div", { className: "d-flex gap-2" }, /* @__PURE__ */ import_react57.default.createElement(Badge_default, { bg: bddStatus.variant }, bddStatus.text));
|
|
32278
32171
|
};
|
|
32279
32172
|
|
|
32280
|
-
// src/
|
|
32281
|
-
var
|
|
32282
|
-
|
|
32283
|
-
|
|
32284
|
-
|
|
32285
|
-
|
|
32286
|
-
|
|
32287
|
-
|
|
32288
|
-
|
|
32289
|
-
|
|
32290
|
-
|
|
32291
|
-
|
|
32292
|
-
|
|
32293
|
-
|
|
32294
|
-
|
|
32295
|
-
|
|
32296
|
-
|
|
32297
|
-
const [projectName, setProjectName] = (0, import_react59.useState)("");
|
|
32298
|
-
const navigate = useNavigate();
|
|
32299
|
-
const location = useLocation();
|
|
32300
|
-
const [route, setRoute] = (0, import_react59.useState)("tests");
|
|
32301
|
-
(0, import_react59.useEffect)(() => {
|
|
32302
|
-
const hash = location.hash.replace("#", "");
|
|
32303
|
-
if (hash && ["tests", "node", "web", "pure"].includes(hash)) {
|
|
32304
|
-
setRoute(hash);
|
|
32305
|
-
} else {
|
|
32306
|
-
setRoute("tests");
|
|
32307
|
-
}
|
|
32308
|
-
}, [location.hash]);
|
|
32309
|
-
const { projectName: name } = useParams();
|
|
32310
|
-
(0, import_react59.useEffect)(() => {
|
|
32311
|
-
if (!name)
|
|
32312
|
-
return;
|
|
32313
|
-
setProjectName(name);
|
|
32314
|
-
const hash = window.location.hash.replace("#", "");
|
|
32315
|
-
if (hash && ["tests", "node", "web", "pure"].includes(hash)) {
|
|
32316
|
-
setRoute(hash);
|
|
32317
|
-
}
|
|
32318
|
-
const fetchData = async () => {
|
|
32319
|
-
try {
|
|
32320
|
-
const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
|
|
32321
|
-
fetch(`reports/${name}/summary.json`),
|
|
32322
|
-
fetch(`bundles/node/${name}/metafile.json`),
|
|
32323
|
-
fetch(`bundles/web/${name}/metafile.json`),
|
|
32324
|
-
fetch(`bundles/pure/${name}/metafile.json`),
|
|
32325
|
-
fetch(`reports/${name}/config.json`)
|
|
32326
|
-
]);
|
|
32327
|
-
if (!summaryRes.ok)
|
|
32328
|
-
throw new Error("Failed to fetch summary");
|
|
32329
|
-
const [summaryData, nodeData, webData, pureData, configData] = await Promise.all([
|
|
32330
|
-
summaryRes.json(),
|
|
32331
|
-
nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
|
|
32332
|
-
webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
|
|
32333
|
-
pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
|
|
32334
|
-
configRes.ok ? configRes.json() : { tests: [] }
|
|
32335
|
-
]);
|
|
32336
|
-
setSummary(summaryData);
|
|
32337
|
-
setNodeLogs(nodeData);
|
|
32338
|
-
setWebLogs(webData);
|
|
32339
|
-
setPureLogs(pureData);
|
|
32340
|
-
setConfig(configData);
|
|
32341
|
-
} catch (err) {
|
|
32342
|
-
setError(err instanceof Error ? err.message : "Unknown error");
|
|
32343
|
-
} finally {
|
|
32344
|
-
setLoading(false);
|
|
32345
|
-
}
|
|
32346
|
-
};
|
|
32347
|
-
fetchData();
|
|
32348
|
-
}, []);
|
|
32349
|
-
if (loading)
|
|
32350
|
-
return /* @__PURE__ */ import_react59.default.createElement("div", null, "Loading project data...");
|
|
32351
|
-
if (error)
|
|
32352
|
-
return /* @__PURE__ */ import_react59.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
|
|
32353
|
-
if (!summary)
|
|
32354
|
-
return /* @__PURE__ */ import_react59.default.createElement(Alert_default, { variant: "warning" }, "No data found for project");
|
|
32355
|
-
const testStatuses = Object.entries(summary).map(([testName2, testData]) => {
|
|
32356
|
-
console.groupCollapsed(`[ProjectPage] Processing test: ${testName2}`);
|
|
32357
|
-
console.log("Raw test data from summary.json:", testData);
|
|
32358
|
-
const checkTestsJson = async () => {
|
|
32359
|
-
try {
|
|
32360
|
-
let runtimeType = "node";
|
|
32361
|
-
const testConfig = config.tests?.find((t) => t[0] === testName2);
|
|
32362
|
-
if (testConfig) {
|
|
32363
|
-
runtimeType = testConfig[1] || runtimeType;
|
|
32364
|
-
} else if (testName2.includes(".web.")) {
|
|
32365
|
-
runtimeType = "web";
|
|
32366
|
-
} else if (testName2.includes(".pure.")) {
|
|
32367
|
-
runtimeType = "pure";
|
|
32368
|
-
}
|
|
32369
|
-
const jsonPath = `reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtimeType}/tests.json`;
|
|
32370
|
-
const res = await fetch(jsonPath, {
|
|
32371
|
-
method: "HEAD"
|
|
32372
|
-
});
|
|
32373
|
-
return res.ok;
|
|
32374
|
-
} catch {
|
|
32375
|
-
return false;
|
|
32376
|
-
}
|
|
32377
|
-
};
|
|
32378
|
-
const testsJsonExists = checkTestsJson();
|
|
32379
|
-
const status = {
|
|
32380
|
-
testName: testName2,
|
|
32381
|
-
testsExist: testsJsonExists && testData.testsExist !== false,
|
|
32382
|
-
// Ensure boolean
|
|
32383
|
-
runTimeErrors: Number(testData.runTimeErrors) || 0,
|
|
32384
|
-
// Ensure number
|
|
32385
|
-
typeErrors: Number(testData.typeErrors) || 0,
|
|
32386
|
-
staticErrors: Number(testData.staticErrors) || 0
|
|
32387
|
-
};
|
|
32388
|
-
console.log("Normalized status:", status);
|
|
32389
|
-
console.log("tests.json exists:", testsJsonExists);
|
|
32390
|
-
if (status.runTimeErrors === -1 && status.testsExist) {
|
|
32391
|
-
console.warn("Inconsistent state: runTimeErrors=-1 but testsExist=true");
|
|
32392
|
-
}
|
|
32393
|
-
if (!status.testsExist && status.runTimeErrors > 0) {
|
|
32394
|
-
console.warn("Inconsistent state: testsExist=false but runTimeErrors>0");
|
|
32395
|
-
}
|
|
32396
|
-
console.groupEnd();
|
|
32397
|
-
return status;
|
|
32398
|
-
});
|
|
32399
|
-
return /* @__PURE__ */ import_react59.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react59.default.createElement(
|
|
32173
|
+
// src/components/pure/TestPageView.tsx
|
|
32174
|
+
var TestPageView = ({
|
|
32175
|
+
route,
|
|
32176
|
+
setRoute,
|
|
32177
|
+
navigate,
|
|
32178
|
+
projectName,
|
|
32179
|
+
testName: testName2,
|
|
32180
|
+
decodedTestPath,
|
|
32181
|
+
runtime,
|
|
32182
|
+
testData,
|
|
32183
|
+
logs,
|
|
32184
|
+
typeErrors,
|
|
32185
|
+
lintErrors,
|
|
32186
|
+
testsExist,
|
|
32187
|
+
errorCounts
|
|
32188
|
+
}) => {
|
|
32189
|
+
return /* @__PURE__ */ import_react58.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32400
32190
|
NavBar,
|
|
32401
32191
|
{
|
|
32402
|
-
title:
|
|
32403
|
-
backLink:
|
|
32192
|
+
title: decodedTestPath,
|
|
32193
|
+
backLink: `/projects/${projectName}`,
|
|
32404
32194
|
navItems: [
|
|
32405
32195
|
{
|
|
32406
|
-
|
|
32407
|
-
|
|
32408
|
-
|
|
32409
|
-
|
|
32196
|
+
label: "",
|
|
32197
|
+
badge: {
|
|
32198
|
+
variant: runtime === "node" ? "primary" : runtime === "web" ? "success" : "info",
|
|
32199
|
+
text: runtime
|
|
32200
|
+
},
|
|
32201
|
+
className: "pe-none d-flex align-items-center gap-2"
|
|
32410
32202
|
},
|
|
32411
32203
|
{
|
|
32412
|
-
to: `#
|
|
32413
|
-
label:
|
|
32414
|
-
|
|
32415
|
-
|
|
32204
|
+
to: `#results`,
|
|
32205
|
+
label: /* @__PURE__ */ import_react58.default.createElement(
|
|
32206
|
+
TestStatusBadge,
|
|
32207
|
+
{
|
|
32208
|
+
testName: decodedTestPath,
|
|
32209
|
+
testsExist,
|
|
32210
|
+
runTimeErrors: errorCounts.runTimeErrors,
|
|
32211
|
+
variant: "compact"
|
|
32212
|
+
}
|
|
32213
|
+
),
|
|
32214
|
+
className: !testsExist || errorCounts.runTimeErrors > 0 ? "text-danger fw-bold" : "",
|
|
32215
|
+
active: route === "results"
|
|
32416
32216
|
},
|
|
32417
32217
|
{
|
|
32418
|
-
to: `#
|
|
32419
|
-
label:
|
|
32420
|
-
active: route === "
|
|
32421
|
-
className: webLogs?.errors?.length ? "text-danger fw-bold" : webLogs?.warnings?.length ? "text-warning fw-bold" : ""
|
|
32218
|
+
to: `#logs`,
|
|
32219
|
+
label: `Runtime logs`,
|
|
32220
|
+
active: route === "logs"
|
|
32422
32221
|
},
|
|
32423
32222
|
{
|
|
32424
|
-
to: `#
|
|
32425
|
-
label:
|
|
32426
|
-
active: route === "
|
|
32427
|
-
|
|
32223
|
+
to: `#types`,
|
|
32224
|
+
label: errorCounts.typeErrors > 0 ? `tsc (\u274C * ${errorCounts.typeErrors})` : "tsc \u2705 ",
|
|
32225
|
+
active: route === "types"
|
|
32226
|
+
},
|
|
32227
|
+
{
|
|
32228
|
+
to: `#lint`,
|
|
32229
|
+
label: errorCounts.staticErrors > 0 ? `eslint (\u274C *${errorCounts.staticErrors}) ` : "eslint \u2705",
|
|
32230
|
+
active: route === "lint"
|
|
32428
32231
|
}
|
|
32429
|
-
]
|
|
32430
|
-
|
|
32431
|
-
|
|
32432
|
-
|
|
32433
|
-
|
|
32434
|
-
|
|
32435
|
-
|
|
32436
|
-
|
|
32437
|
-
|
|
32438
|
-
|
|
32439
|
-
|
|
32440
|
-
|
|
32441
|
-
|
|
32442
|
-
|
|
32443
|
-
|
|
32444
|
-
|
|
32445
|
-
|
|
32446
|
-
|
|
32447
|
-
|
|
32448
|
-
|
|
32449
|
-
|
|
32450
|
-
|
|
32451
|
-
|
|
32452
|
-
|
|
32453
|
-
|
|
32454
|
-
|
|
32455
|
-
|
|
32456
|
-
|
|
32232
|
+
],
|
|
32233
|
+
rightContent: /* @__PURE__ */ import_react58.default.createElement(
|
|
32234
|
+
Button_default2,
|
|
32235
|
+
{
|
|
32236
|
+
variant: "info",
|
|
32237
|
+
onClick: async () => {
|
|
32238
|
+
try {
|
|
32239
|
+
const promptPath = `testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/prompt.txt`;
|
|
32240
|
+
const messagePath = `testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/message.txt`;
|
|
32241
|
+
const command = `aider --load ${promptPath} --message-file ${messagePath}`;
|
|
32242
|
+
await navigator.clipboard.writeText(command);
|
|
32243
|
+
alert("Copied aider command to clipboard!");
|
|
32244
|
+
} catch (err) {
|
|
32245
|
+
alert("Failed to copy command to clipboard");
|
|
32246
|
+
console.error("Copy failed:", err);
|
|
32247
|
+
}
|
|
32248
|
+
},
|
|
32249
|
+
className: "ms-2"
|
|
32250
|
+
},
|
|
32251
|
+
"\u{1F916}"
|
|
32252
|
+
)
|
|
32253
|
+
}
|
|
32254
|
+
), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Container, { activeKey: route, onSelect: (k) => {
|
|
32255
|
+
if (k) {
|
|
32256
|
+
setRoute(k);
|
|
32257
|
+
navigate(`#${k}`, { replace: true });
|
|
32258
|
+
}
|
|
32259
|
+
} }, /* @__PURE__ */ import_react58.default.createElement(Tab_default.Content, { className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "results" }, !testsExist ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "danger", className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Tests did not run to completion"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The test results file (tests.json) was not found or could not be loaded."), /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32260
|
+
Button_default2,
|
|
32261
|
+
{
|
|
32262
|
+
variant: "outline-light",
|
|
32263
|
+
onClick: () => setRoute("logs"),
|
|
32264
|
+
className: "me-2"
|
|
32265
|
+
},
|
|
32266
|
+
"View Runtime Logs"
|
|
32267
|
+
), /* @__PURE__ */ import_react58.default.createElement(
|
|
32268
|
+
Button_default2,
|
|
32269
|
+
{
|
|
32270
|
+
variant: "outline-light",
|
|
32271
|
+
onClick: () => navigate(`/projects/${projectName}#${runtime}`)
|
|
32272
|
+
},
|
|
32273
|
+
"View Build Logs"
|
|
32274
|
+
))) : testData ? /* @__PURE__ */ import_react58.default.createElement("div", { className: "test-results" }, testData.givens.map((given, i) => /* @__PURE__ */ import_react58.default.createElement("div", { key: i, className: "mb-4 card" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-header bg-primary text-white" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Given: ", given.name), given.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "dropdown" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32275
|
+
"button",
|
|
32276
|
+
{
|
|
32277
|
+
className: "btn btn-sm btn-light dropdown-toggle",
|
|
32278
|
+
type: "button",
|
|
32279
|
+
"data-bs-toggle": "dropdown"
|
|
32280
|
+
},
|
|
32281
|
+
"Artifacts (",
|
|
32282
|
+
given.artifacts.length,
|
|
32283
|
+
")"
|
|
32284
|
+
), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32285
|
+
"a",
|
|
32286
|
+
{
|
|
32287
|
+
className: "dropdown-item",
|
|
32288
|
+
href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
|
|
32289
|
+
target: "_blank",
|
|
32290
|
+
rel: "noopener noreferrer"
|
|
32291
|
+
},
|
|
32292
|
+
artifact.split("/").pop()
|
|
32293
|
+
))))))), /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "When:"), " ", when.name, when.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, when.error)), when.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32294
|
+
"a",
|
|
32295
|
+
{
|
|
32296
|
+
href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
|
|
32297
|
+
target: "_blank",
|
|
32298
|
+
className: "text-white",
|
|
32299
|
+
rel: "noopener noreferrer"
|
|
32300
|
+
},
|
|
32301
|
+
artifact.split("/").pop()
|
|
32302
|
+
)))))))), given.thens.map((then, k) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Then:"), " ", then.name, then.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, then.error)), then.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
|
|
32303
|
+
"a",
|
|
32304
|
+
{
|
|
32305
|
+
href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
|
|
32306
|
+
target: "_blank",
|
|
32307
|
+
className: "text-white",
|
|
32308
|
+
rel: "noopener noreferrer"
|
|
32309
|
+
},
|
|
32310
|
+
artifact.split("/").pop()
|
|
32311
|
+
)))))))))))) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No test results found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "logs" }, logs === void 0 ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "danger" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Logs file missing"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The runtime logs file (logs.txt) was not found."), /* @__PURE__ */ import_react58.default.createElement("p", null, "This suggests the test may not have executed properly.")) : logs === "" ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "No runtime logs"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The test executed successfully with no log output.")) : /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, logs)), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "types" }, typeErrors ? /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, typeErrors) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No type errors found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "lint" }, lintErrors ? /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, lintErrors) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No lint errors found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "coverage" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "coverage-report" }, /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "info" }, "Coverage reports coming soon!"), /* @__PURE__ */ import_react58.default.createElement("div", { className: "coverage-stats" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-success text-white" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "85%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Lines Covered")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-warning text-dark" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "72%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Branches Covered")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-info text-white" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "91%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Functions Covered"))))))));
|
|
32312
|
+
};
|
|
32457
32313
|
|
|
32458
32314
|
// src/utils/api.ts
|
|
32459
32315
|
var fetchTestData = async (projectName, filepath, runTime) => {
|
|
@@ -32492,12 +32348,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32492
32348
|
}
|
|
32493
32349
|
};
|
|
32494
32350
|
|
|
32495
|
-
// src/TestPage.tsx
|
|
32351
|
+
// src/components/stateful/TestPage.tsx
|
|
32496
32352
|
var TestPage = () => {
|
|
32497
32353
|
const navigate = useNavigate();
|
|
32498
32354
|
const location = useLocation();
|
|
32499
|
-
const [route, setRoute] = (0,
|
|
32500
|
-
(0,
|
|
32355
|
+
const [route, setRoute] = (0, import_react59.useState)("results");
|
|
32356
|
+
(0, import_react59.useEffect)(() => {
|
|
32501
32357
|
const hash = location.hash.replace("#", "");
|
|
32502
32358
|
if (hash && ["results", "logs", "types", "lint", "coverage"].includes(hash)) {
|
|
32503
32359
|
setRoute(hash);
|
|
@@ -32505,26 +32361,26 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32505
32361
|
setRoute("results");
|
|
32506
32362
|
}
|
|
32507
32363
|
}, [location.hash]);
|
|
32508
|
-
const [testName2, setTestName] = (0,
|
|
32509
|
-
const [testData, setTestData] = (0,
|
|
32510
|
-
const [logs, setLogs] = (0,
|
|
32511
|
-
const [typeErrors, setTypeErrors] = (0,
|
|
32512
|
-
const [lintErrors, setLintErrors] = (0,
|
|
32513
|
-
const [loading, setLoading] = (0,
|
|
32514
|
-
const [error, setError] = (0,
|
|
32515
|
-
const [testsExist, setTestsExist] = (0,
|
|
32516
|
-
const [errorCounts, setErrorCounts] = (0,
|
|
32364
|
+
const [testName2, setTestName] = (0, import_react59.useState)("");
|
|
32365
|
+
const [testData, setTestData] = (0, import_react59.useState)(null);
|
|
32366
|
+
const [logs, setLogs] = (0, import_react59.useState)("");
|
|
32367
|
+
const [typeErrors, setTypeErrors] = (0, import_react59.useState)("");
|
|
32368
|
+
const [lintErrors, setLintErrors] = (0, import_react59.useState)("");
|
|
32369
|
+
const [loading, setLoading] = (0, import_react59.useState)(true);
|
|
32370
|
+
const [error, setError] = (0, import_react59.useState)(null);
|
|
32371
|
+
const [testsExist, setTestsExist] = (0, import_react59.useState)(true);
|
|
32372
|
+
const [errorCounts, setErrorCounts] = (0, import_react59.useState)({
|
|
32517
32373
|
typeErrors: 0,
|
|
32518
32374
|
staticErrors: 0,
|
|
32519
32375
|
runTimeErrors: 0
|
|
32520
32376
|
});
|
|
32521
|
-
const [summary, setSummary] = (0,
|
|
32377
|
+
const [summary, setSummary] = (0, import_react59.useState)(null);
|
|
32522
32378
|
const { projectName, "*": splat } = useParams();
|
|
32523
32379
|
const pathParts = splat ? splat.split("/") : [];
|
|
32524
32380
|
const runtime = pathParts.pop() || "";
|
|
32525
32381
|
const testPath = pathParts.join("/");
|
|
32526
32382
|
const decodedTestPath = testPath ? decodeURIComponent(testPath) : "";
|
|
32527
|
-
(0,
|
|
32383
|
+
(0, import_react59.useEffect)(() => {
|
|
32528
32384
|
if (!projectName || !testPath || !runtime)
|
|
32529
32385
|
return;
|
|
32530
32386
|
setTestName(testPath);
|
|
@@ -32542,26 +32398,15 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32542
32398
|
throw new Error("Failed to fetch summary");
|
|
32543
32399
|
const allSummaries = await summaryResponse.json();
|
|
32544
32400
|
const testSummary = allSummaries[testPath];
|
|
32545
|
-
console.log("testSummary", testSummary);
|
|
32546
32401
|
if (testSummary) {
|
|
32547
|
-
console.groupCollapsed(`[TestPage] Processing test summary for ${testPath}`);
|
|
32548
|
-
console.log("Raw test summary:", testSummary);
|
|
32549
32402
|
const counts = {
|
|
32550
32403
|
typeErrors: Number(testSummary.typeErrors) || 0,
|
|
32551
32404
|
staticErrors: Number(testSummary.staticErrors) || 0,
|
|
32552
32405
|
runTimeErrors: Number(testSummary.runTimeErrors) || 0
|
|
32553
32406
|
};
|
|
32554
|
-
console.log("Normalized counts:", counts);
|
|
32555
|
-
if (counts.runTimeErrors === -1 && testSummary.testsExist) {
|
|
32556
|
-
console.warn("Inconsistent state: runTimeErrors=-1 but testsExist=true");
|
|
32557
|
-
}
|
|
32558
|
-
if (!testSummary.testsExist && counts.runTimeErrors > 0) {
|
|
32559
|
-
console.warn("Inconsistent state: testsExist=false but runTimeErrors>0");
|
|
32560
|
-
}
|
|
32561
32407
|
setSummary(testSummary);
|
|
32562
32408
|
setErrorCounts(counts);
|
|
32563
32409
|
setTestsExist(testSummary.testsExist !== false);
|
|
32564
|
-
console.groupEnd();
|
|
32565
32410
|
}
|
|
32566
32411
|
} catch (err) {
|
|
32567
32412
|
console.error("Failed to load summary:", err);
|
|
@@ -32575,123 +32420,39 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32575
32420
|
};
|
|
32576
32421
|
fetchData();
|
|
32577
32422
|
}, []);
|
|
32578
|
-
|
|
32579
|
-
|
|
32580
|
-
if (error)
|
|
32581
|
-
return /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
|
|
32582
|
-
console.log("Test status debug:", {
|
|
32583
|
-
testName: testName2,
|
|
32584
|
-
testsExist,
|
|
32585
|
-
testData,
|
|
32586
|
-
fails: testData?.fails,
|
|
32587
|
-
runTimeErrors: errorCounts.runTimeErrors,
|
|
32588
|
-
typeErrors: errorCounts.typeErrors,
|
|
32589
|
-
staticErrors: errorCounts.staticErrors
|
|
32590
|
-
});
|
|
32591
|
-
console.log("Test data:", {
|
|
32592
|
-
testData,
|
|
32593
|
-
testsExist,
|
|
32594
|
-
errorCounts,
|
|
32595
|
-
summary
|
|
32596
|
-
});
|
|
32597
|
-
return /* @__PURE__ */ import_react60.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react60.default.createElement(
|
|
32598
|
-
NavBar,
|
|
32423
|
+
return /* @__PURE__ */ import_react59.default.createElement(
|
|
32424
|
+
TestPageView,
|
|
32599
32425
|
{
|
|
32600
|
-
|
|
32601
|
-
|
|
32602
|
-
|
|
32603
|
-
|
|
32604
|
-
|
|
32605
|
-
|
|
32606
|
-
|
|
32607
|
-
|
|
32608
|
-
|
|
32609
|
-
|
|
32610
|
-
|
|
32611
|
-
|
|
32612
|
-
|
|
32613
|
-
|
|
32614
|
-
|
|
32615
|
-
|
|
32616
|
-
testName: decodedTestPath,
|
|
32617
|
-
testsExist,
|
|
32618
|
-
runTimeErrors: errorCounts.runTimeErrors,
|
|
32619
|
-
variant: "compact"
|
|
32620
|
-
}
|
|
32621
|
-
),
|
|
32622
|
-
className: !testsExist || errorCounts.runTimeErrors > 0 ? "text-danger fw-bold" : "",
|
|
32623
|
-
active: route === "results"
|
|
32624
|
-
},
|
|
32625
|
-
{
|
|
32626
|
-
to: `#logs`,
|
|
32627
|
-
label: `Runtime logs`,
|
|
32628
|
-
active: route === "logs"
|
|
32629
|
-
},
|
|
32630
|
-
{
|
|
32631
|
-
to: `#types`,
|
|
32632
|
-
label: errorCounts.typeErrors > 0 ? `tsc (\u274C * ${errorCounts.typeErrors})` : "tsc \u2705 ",
|
|
32633
|
-
active: route === "types"
|
|
32634
|
-
},
|
|
32635
|
-
{
|
|
32636
|
-
to: `#lint`,
|
|
32637
|
-
label: errorCounts.staticErrors > 0 ? `eslint (\u274C *${errorCounts.staticErrors}) ` : "eslint \u2705",
|
|
32638
|
-
active: route === "lint"
|
|
32639
|
-
}
|
|
32640
|
-
],
|
|
32641
|
-
rightContent: /* @__PURE__ */ import_react60.default.createElement(
|
|
32642
|
-
Button_default2,
|
|
32643
|
-
{
|
|
32644
|
-
variant: "info",
|
|
32645
|
-
onClick: async () => {
|
|
32646
|
-
try {
|
|
32647
|
-
const promptPath = `testeranto/reports/${projectName}/${testPath.split(".").slice(0, -1).join(".")}/${runtime}/prompt.txt`;
|
|
32648
|
-
const messagePath = `testeranto/reports/${projectName}/${testPath.split(".").slice(0, -1).join(".")}/${runtime}/message.txt`;
|
|
32649
|
-
const command = `aider --load ${promptPath} --message-file ${messagePath}`;
|
|
32650
|
-
await navigator.clipboard.writeText(command);
|
|
32651
|
-
alert("Copied aider command to clipboard!");
|
|
32652
|
-
} catch (err) {
|
|
32653
|
-
alert("Failed to copy command to clipboard");
|
|
32654
|
-
console.error("Copy failed:", err);
|
|
32655
|
-
}
|
|
32656
|
-
},
|
|
32657
|
-
className: "ms-2"
|
|
32658
|
-
},
|
|
32659
|
-
"\u{1F916}"
|
|
32660
|
-
)
|
|
32661
|
-
}
|
|
32662
|
-
), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Container, { activeKey: route, onSelect: (k) => {
|
|
32663
|
-
if (k) {
|
|
32664
|
-
setRoute(k);
|
|
32665
|
-
navigate(`#${k}`, { replace: true });
|
|
32426
|
+
route,
|
|
32427
|
+
setRoute,
|
|
32428
|
+
navigate,
|
|
32429
|
+
projectName,
|
|
32430
|
+
testName: testName2,
|
|
32431
|
+
decodedTestPath,
|
|
32432
|
+
runtime,
|
|
32433
|
+
testData,
|
|
32434
|
+
logs,
|
|
32435
|
+
typeErrors,
|
|
32436
|
+
lintErrors,
|
|
32437
|
+
loading,
|
|
32438
|
+
error,
|
|
32439
|
+
testsExist,
|
|
32440
|
+
errorCounts,
|
|
32441
|
+
summary
|
|
32666
32442
|
}
|
|
32667
|
-
|
|
32668
|
-
Button_default2,
|
|
32669
|
-
{
|
|
32670
|
-
variant: "outline-light",
|
|
32671
|
-
onClick: () => setRoute("logs"),
|
|
32672
|
-
className: "me-2"
|
|
32673
|
-
},
|
|
32674
|
-
"View Runtime Logs"
|
|
32675
|
-
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32676
|
-
Button_default2,
|
|
32677
|
-
{
|
|
32678
|
-
variant: "outline-light",
|
|
32679
|
-
onClick: () => navigate(`/projects/${projectName}#${runtime}`)
|
|
32680
|
-
},
|
|
32681
|
-
"View Build Logs"
|
|
32682
|
-
))) : testData ? /* @__PURE__ */ import_react60.default.createElement("div", { className: "test-results" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "mb-3" }), testData.givens.map((given, i) => /* @__PURE__ */ import_react60.default.createElement("div", { key: i, className: "mb-4 card" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "card-header bg-primary text-white" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "Given: ", given.name)), /* @__PURE__ */ import_react60.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => /* @__PURE__ */ import_react60.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react60.default.createElement("strong", null, "When:"), " ", when.name, when.error && /* @__PURE__ */ import_react60.default.createElement("pre", { className: "mt-2" }, when.error))), given.thens.map((then, k) => /* @__PURE__ */ import_react60.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react60.default.createElement("strong", null, "Then:"), " ", then.name, then.error && /* @__PURE__ */ import_react60.default.createElement("pre", { className: "mt-2" }, then.error))))))) : /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "warning" }, "No test results found")), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "logs" }, logs === void 0 ? /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "danger" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "Logs file missing"), /* @__PURE__ */ import_react60.default.createElement("p", null, "The runtime logs file (logs.txt) was not found."), /* @__PURE__ */ import_react60.default.createElement("p", null, "This suggests the test may not have executed properly.")) : logs === "" ? /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "No runtime logs"), /* @__PURE__ */ import_react60.default.createElement("p", null, "The test executed successfully with no log output.")) : /* @__PURE__ */ import_react60.default.createElement("pre", { className: "bg-dark text-white p-3" }, logs)), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "types" }, typeErrors ? /* @__PURE__ */ import_react60.default.createElement("pre", { className: "bg-dark text-white p-3" }, typeErrors) : /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "warning" }, "No type errors found")), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "lint" }, lintErrors ? /* @__PURE__ */ import_react60.default.createElement("pre", { className: "bg-dark text-white p-3" }, lintErrors) : /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "warning" }, "No lint errors found")), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "coverage" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "coverage-report" }, /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "info" }, "Coverage reports coming soon!"), /* @__PURE__ */ import_react60.default.createElement("div", { className: "coverage-stats" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "stat-card bg-success text-white" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "85%"), /* @__PURE__ */ import_react60.default.createElement("p", null, "Lines Covered")), /* @__PURE__ */ import_react60.default.createElement("div", { className: "stat-card bg-warning text-dark" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "72%"), /* @__PURE__ */ import_react60.default.createElement("p", null, "Branches Covered")), /* @__PURE__ */ import_react60.default.createElement("div", { className: "stat-card bg-info text-white" }, /* @__PURE__ */ import_react60.default.createElement("h4", null, "91%"), /* @__PURE__ */ import_react60.default.createElement("p", null, "Functions Covered"))))))));
|
|
32443
|
+
);
|
|
32683
32444
|
};
|
|
32684
32445
|
|
|
32685
32446
|
// src/SettingsButton.tsx
|
|
32686
|
-
var
|
|
32447
|
+
var import_react61 = __toESM(require_react(), 1);
|
|
32687
32448
|
|
|
32688
32449
|
// src/components/SunriseAnimation.tsx
|
|
32689
|
-
var
|
|
32450
|
+
var import_react60 = __toESM(require_react(), 1);
|
|
32690
32451
|
var SunriseAnimation = ({ active }) => {
|
|
32691
|
-
const [position, setPosition] = (0,
|
|
32692
|
-
const [dimensions, setDimensions] = (0,
|
|
32693
|
-
const animationIdRef = (0,
|
|
32694
|
-
(0,
|
|
32452
|
+
const [position, setPosition] = (0, import_react60.useState)(0);
|
|
32453
|
+
const [dimensions, setDimensions] = (0, import_react60.useState)({ width: 0, height: 0 });
|
|
32454
|
+
const animationIdRef = (0, import_react60.useRef)(null);
|
|
32455
|
+
(0, import_react60.useEffect)(() => {
|
|
32695
32456
|
setDimensions({
|
|
32696
32457
|
width: window.innerWidth,
|
|
32697
32458
|
height: window.innerHeight
|
|
@@ -32709,7 +32470,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32709
32470
|
}, []);
|
|
32710
32471
|
const ANIMATION_DURATION = 1e4;
|
|
32711
32472
|
const UPDATE_INTERVAL = 50;
|
|
32712
|
-
(0,
|
|
32473
|
+
(0, import_react60.useEffect)(() => {
|
|
32713
32474
|
if (!active) {
|
|
32714
32475
|
if (animationIdRef.current) {
|
|
32715
32476
|
cancelAnimationFrame(animationIdRef.current);
|
|
@@ -32744,7 +32505,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32744
32505
|
const normalizedPos = (position + 1) / 2;
|
|
32745
32506
|
if (!active)
|
|
32746
32507
|
return null;
|
|
32747
|
-
return /* @__PURE__ */
|
|
32508
|
+
return /* @__PURE__ */ import_react60.default.createElement("div", { id: "sunrise", style: {
|
|
32748
32509
|
width: "100vw",
|
|
32749
32510
|
height: "100vh",
|
|
32750
32511
|
position: "fixed",
|
|
@@ -32753,7 +32514,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32753
32514
|
backgroundColor: "transparent",
|
|
32754
32515
|
overflow: "hidden",
|
|
32755
32516
|
pointerEvents: "none"
|
|
32756
|
-
} }, /* @__PURE__ */
|
|
32517
|
+
} }, /* @__PURE__ */ import_react60.default.createElement("div", { id: "daily-bg", style: {
|
|
32757
32518
|
position: "absolute",
|
|
32758
32519
|
top: 0,
|
|
32759
32520
|
left: 0,
|
|
@@ -32761,7 +32522,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32761
32522
|
height: "100%",
|
|
32762
32523
|
backgroundColor: "rgba(0,0,0,0.3)",
|
|
32763
32524
|
zIndex: -1001
|
|
32764
|
-
} }), "Stars Container", /* @__PURE__ */
|
|
32525
|
+
} }), "Stars Container", /* @__PURE__ */ import_react60.default.createElement(
|
|
32765
32526
|
"div",
|
|
32766
32527
|
{
|
|
32767
32528
|
id: "starsContainer",
|
|
@@ -32778,7 +32539,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32778
32539
|
opacity: Math.max(0, 0.5 - normalizedPos * 0.5)
|
|
32779
32540
|
}
|
|
32780
32541
|
},
|
|
32781
|
-
/* @__PURE__ */
|
|
32542
|
+
/* @__PURE__ */ import_react60.default.createElement(
|
|
32782
32543
|
"div",
|
|
32783
32544
|
{
|
|
32784
32545
|
id: "stars",
|
|
@@ -32794,7 +32555,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32794
32555
|
}
|
|
32795
32556
|
}
|
|
32796
32557
|
)
|
|
32797
|
-
), /* @__PURE__ */
|
|
32558
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32798
32559
|
"div",
|
|
32799
32560
|
{
|
|
32800
32561
|
id: "sun",
|
|
@@ -32810,7 +32571,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32810
32571
|
opacity: 0.5
|
|
32811
32572
|
}
|
|
32812
32573
|
}
|
|
32813
|
-
), /* @__PURE__ */
|
|
32574
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32814
32575
|
"div",
|
|
32815
32576
|
{
|
|
32816
32577
|
id: "sunDay",
|
|
@@ -32825,7 +32586,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32825
32586
|
opacity: Math.max(0, 1 - yPos / dimensions.height)
|
|
32826
32587
|
}
|
|
32827
32588
|
}
|
|
32828
|
-
), /* @__PURE__ */
|
|
32589
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32829
32590
|
"div",
|
|
32830
32591
|
{
|
|
32831
32592
|
id: "sunSet",
|
|
@@ -32840,7 +32601,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32840
32601
|
opacity: Math.max(0, yPos / dimensions.height - 0.2)
|
|
32841
32602
|
}
|
|
32842
32603
|
}
|
|
32843
|
-
), /* @__PURE__ */
|
|
32604
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32844
32605
|
"div",
|
|
32845
32606
|
{
|
|
32846
32607
|
id: "sky",
|
|
@@ -32855,7 +32616,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32855
32616
|
opacity: Math.max(0, 1 - yPos / dimensions.height)
|
|
32856
32617
|
}
|
|
32857
32618
|
}
|
|
32858
|
-
), /* @__PURE__ */
|
|
32619
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32859
32620
|
"div",
|
|
32860
32621
|
{
|
|
32861
32622
|
id: "horizon",
|
|
@@ -32870,7 +32631,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32870
32631
|
opacity: Math.max(0, yPos > dimensions.height / 2 ? (dimensions.height - yPos) / (dimensions.height / 2) + 0.2 : yPos / (dimensions.height / 2))
|
|
32871
32632
|
}
|
|
32872
32633
|
}
|
|
32873
|
-
), /* @__PURE__ */
|
|
32634
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32874
32635
|
"div",
|
|
32875
32636
|
{
|
|
32876
32637
|
id: "horizonNight",
|
|
@@ -32885,7 +32646,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32885
32646
|
opacity: Math.max(0, (yPos - dimensions.height * 4 / 5) / (dimensions.height - dimensions.height * 4 / 5))
|
|
32886
32647
|
}
|
|
32887
32648
|
}
|
|
32888
|
-
), /* @__PURE__ */
|
|
32649
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32889
32650
|
"div",
|
|
32890
32651
|
{
|
|
32891
32652
|
id: "moon",
|
|
@@ -32900,7 +32661,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32900
32661
|
opacity: Math.max(0, (yPos - dimensions.height * 9 / 10) / (dimensions.height - dimensions.height * 9 / 10))
|
|
32901
32662
|
}
|
|
32902
32663
|
}
|
|
32903
|
-
), /* @__PURE__ */
|
|
32664
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32904
32665
|
"div",
|
|
32905
32666
|
{
|
|
32906
32667
|
id: "water",
|
|
@@ -32915,7 +32676,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32915
32676
|
zIndex: -400
|
|
32916
32677
|
}
|
|
32917
32678
|
}
|
|
32918
|
-
), /* @__PURE__ */
|
|
32679
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32919
32680
|
"div",
|
|
32920
32681
|
{
|
|
32921
32682
|
id: "waterReflectionContainer",
|
|
@@ -32932,7 +32693,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32932
32693
|
transform: `translateY(${dimensions.height - yPos}px)`
|
|
32933
32694
|
}
|
|
32934
32695
|
},
|
|
32935
|
-
/* @__PURE__ */
|
|
32696
|
+
/* @__PURE__ */ import_react60.default.createElement(
|
|
32936
32697
|
"div",
|
|
32937
32698
|
{
|
|
32938
32699
|
id: "waterReflectionMiddle",
|
|
@@ -32949,7 +32710,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32949
32710
|
}
|
|
32950
32711
|
}
|
|
32951
32712
|
)
|
|
32952
|
-
), /* @__PURE__ */
|
|
32713
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32953
32714
|
"div",
|
|
32954
32715
|
{
|
|
32955
32716
|
id: "waterDistance",
|
|
@@ -32964,7 +32725,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32964
32725
|
opacity: Math.max(0, yPos / dimensions.height + 0.6)
|
|
32965
32726
|
}
|
|
32966
32727
|
}
|
|
32967
|
-
), /* @__PURE__ */
|
|
32728
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32968
32729
|
"div",
|
|
32969
32730
|
{
|
|
32970
32731
|
id: "darknessOverlaySky",
|
|
@@ -32979,7 +32740,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32979
32740
|
zIndex: -50
|
|
32980
32741
|
}
|
|
32981
32742
|
}
|
|
32982
|
-
), /* @__PURE__ */
|
|
32743
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32983
32744
|
"div",
|
|
32984
32745
|
{
|
|
32985
32746
|
id: "darknessOverlay",
|
|
@@ -32994,7 +32755,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
32994
32755
|
zIndex: -5
|
|
32995
32756
|
}
|
|
32996
32757
|
}
|
|
32997
|
-
), /* @__PURE__ */
|
|
32758
|
+
), /* @__PURE__ */ import_react60.default.createElement(
|
|
32998
32759
|
"div",
|
|
32999
32760
|
{
|
|
33000
32761
|
id: "oceanRipple",
|
|
@@ -33015,12 +32776,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33015
32776
|
|
|
33016
32777
|
// src/SettingsButton.tsx
|
|
33017
32778
|
var SettingsButton = ({ className }) => {
|
|
33018
|
-
(0,
|
|
32779
|
+
(0, import_react61.useEffect)(() => {
|
|
33019
32780
|
return () => {
|
|
33020
32781
|
};
|
|
33021
32782
|
}, []);
|
|
33022
|
-
const [showModal, setShowModal] = (0,
|
|
33023
|
-
const [theme, setTheme] = (0,
|
|
32783
|
+
const [showModal, setShowModal] = (0, import_react61.useState)(false);
|
|
32784
|
+
const [theme, setTheme] = (0, import_react61.useState)(localStorage.getItem("theme") || "system");
|
|
33024
32785
|
const handleThemeChange = (e) => {
|
|
33025
32786
|
const newTheme = e.target.value;
|
|
33026
32787
|
setTheme(newTheme);
|
|
@@ -33031,14 +32792,14 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33031
32792
|
}
|
|
33032
32793
|
document.documentElement.setAttribute("data-bs-theme", themeToApply);
|
|
33033
32794
|
};
|
|
33034
|
-
return /* @__PURE__ */
|
|
32795
|
+
return /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.default.createElement("div", { id: "settings-button" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33035
32796
|
"button",
|
|
33036
32797
|
{
|
|
33037
32798
|
className: `btn btn-sm btn-outline-secondary ${className}`,
|
|
33038
32799
|
onClick: () => setShowModal(true)
|
|
33039
32800
|
},
|
|
33040
|
-
/* @__PURE__ */
|
|
33041
|
-
)), /* @__PURE__ */
|
|
32801
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { id: "gear-icon-settings" }, "\u2699\uFE0F")
|
|
32802
|
+
)), /* @__PURE__ */ import_react61.default.createElement(SunriseAnimation_default, { active: theme === "daily" }), /* @__PURE__ */ import_react61.default.createElement(Modal_default2, { show: showModal, onHide: () => setShowModal(false), size: "lg" }, /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Header, { closeButton: true, className: "border-0" }, /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Title, { className: "d-flex align-items-center" }, /* @__PURE__ */ import_react61.default.createElement("i", { className: "bi bi-palette-fill me-2" }), /* @__PURE__ */ import_react61.default.createElement("span", null, "Settings"))), /* @__PURE__ */ import_react61.default.createElement("div", { className: "alert alert-warning mx-3 mt-2 mb-0" }, /* @__PURE__ */ import_react61.default.createElement("i", { className: "bi bi-exclamation-triangle-fill me-2" }), /* @__PURE__ */ import_react61.default.createElement("strong", null, "Warning:"), ' Themes are an experimental feature. Only "Business casual" is fully supported at this time.'), /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Body, { className: "p-0" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "row g-3" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33042
32803
|
"div",
|
|
33043
32804
|
{
|
|
33044
32805
|
className: `card theme-card ${theme === "system" ? "border-primary" : ""}`,
|
|
@@ -33048,8 +32809,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33048
32809
|
borderColor: "#adb5bd"
|
|
33049
32810
|
}
|
|
33050
32811
|
},
|
|
33051
|
-
/* @__PURE__ */
|
|
33052
|
-
)), /* @__PURE__ */
|
|
32812
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "9 to 5"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Follows your OS theme"))
|
|
32813
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33053
32814
|
"div",
|
|
33054
32815
|
{
|
|
33055
32816
|
className: `card theme-card ${theme === "light" ? "border-primary" : ""}`,
|
|
@@ -33061,8 +32822,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33061
32822
|
borderWidth: "2px"
|
|
33062
32823
|
}
|
|
33063
32824
|
},
|
|
33064
|
-
/* @__PURE__ */
|
|
33065
|
-
)), /* @__PURE__ */
|
|
32825
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Business casual"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Clean & professional"))
|
|
32826
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33066
32827
|
"div",
|
|
33067
32828
|
{
|
|
33068
32829
|
className: `card theme-card ${theme === "dark" ? "border-primary" : ""}`,
|
|
@@ -33074,8 +32835,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33074
32835
|
borderWidth: "2px"
|
|
33075
32836
|
}
|
|
33076
32837
|
},
|
|
33077
|
-
/* @__PURE__ */
|
|
33078
|
-
)), /* @__PURE__ */
|
|
32838
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Business formal"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Premium & focused"))
|
|
32839
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33079
32840
|
"div",
|
|
33080
32841
|
{
|
|
33081
32842
|
className: `card theme-card ${theme === "light-vibrant" ? "border-primary" : ""}`,
|
|
@@ -33086,8 +32847,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33086
32847
|
color: "#fff"
|
|
33087
32848
|
}
|
|
33088
32849
|
},
|
|
33089
|
-
/* @__PURE__ */
|
|
33090
|
-
)), /* @__PURE__ */
|
|
32850
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Office Party"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Colorful & fun"))
|
|
32851
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33091
32852
|
"div",
|
|
33092
32853
|
{
|
|
33093
32854
|
className: `card theme-card ${theme === "dark-vibrant" ? "border-primary" : ""}`,
|
|
@@ -33098,8 +32859,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33098
32859
|
color: "#fff"
|
|
33099
32860
|
}
|
|
33100
32861
|
},
|
|
33101
|
-
/* @__PURE__ */
|
|
33102
|
-
)), /* @__PURE__ */
|
|
32862
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "After Party"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Neon nightlife"))
|
|
32863
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33103
32864
|
"div",
|
|
33104
32865
|
{
|
|
33105
32866
|
className: `card theme-card ${theme === "sepia" ? "border-primary" : ""}`,
|
|
@@ -33110,8 +32871,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33110
32871
|
color: "#3a3226"
|
|
33111
32872
|
}
|
|
33112
32873
|
},
|
|
33113
|
-
/* @__PURE__ */
|
|
33114
|
-
)), /* @__PURE__ */
|
|
32874
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "WFH"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Vintage warmth"))
|
|
32875
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33115
32876
|
"div",
|
|
33116
32877
|
{
|
|
33117
32878
|
className: `card theme-card ${theme === "light-grayscale" ? "border-primary" : ""}`,
|
|
@@ -33123,8 +32884,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33123
32884
|
borderWidth: "2px"
|
|
33124
32885
|
}
|
|
33125
32886
|
},
|
|
33126
|
-
/* @__PURE__ */
|
|
33127
|
-
)), /* @__PURE__ */
|
|
32887
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Serious Business"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Simple & distraction-free"))
|
|
32888
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33128
32889
|
"div",
|
|
33129
32890
|
{
|
|
33130
32891
|
className: `card theme-card ${theme === "dark-grayscale" ? "border-primary" : ""}`,
|
|
@@ -33136,8 +32897,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33136
32897
|
borderWidth: "2px"
|
|
33137
32898
|
}
|
|
33138
32899
|
},
|
|
33139
|
-
/* @__PURE__ */
|
|
33140
|
-
)), /* @__PURE__ */
|
|
32900
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Very Serious business"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Maximum readability"))
|
|
32901
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33141
32902
|
"div",
|
|
33142
32903
|
{
|
|
33143
32904
|
className: `card theme-card ${theme === "daily" ? "border-primary" : ""}`,
|
|
@@ -33148,8 +32909,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33148
32909
|
color: "#00192d"
|
|
33149
32910
|
}
|
|
33150
32911
|
},
|
|
33151
|
-
/* @__PURE__ */
|
|
33152
|
-
)), /* @__PURE__ */
|
|
32912
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Dreaming of PTO"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Sunrise, sunset"))
|
|
32913
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33153
32914
|
"div",
|
|
33154
32915
|
{
|
|
33155
32916
|
className: `card theme-card ${theme === "protanopia" ? "border-primary" : ""}`,
|
|
@@ -33160,8 +32921,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33160
32921
|
color: "#333"
|
|
33161
32922
|
}
|
|
33162
32923
|
},
|
|
33163
|
-
/* @__PURE__ */
|
|
33164
|
-
)), /* @__PURE__ */
|
|
32924
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Protanopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Red-blind mode"))
|
|
32925
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33165
32926
|
"div",
|
|
33166
32927
|
{
|
|
33167
32928
|
className: `card theme-card ${theme === "deuteranopia" ? "border-primary" : ""}`,
|
|
@@ -33172,8 +32933,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33172
32933
|
color: "#333"
|
|
33173
32934
|
}
|
|
33174
32935
|
},
|
|
33175
|
-
/* @__PURE__ */
|
|
33176
|
-
)), /* @__PURE__ */
|
|
32936
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Deuteranopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Green-blind mode"))
|
|
32937
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
33177
32938
|
"div",
|
|
33178
32939
|
{
|
|
33179
32940
|
className: `card theme-card ${theme === "tritanopia" ? "border-primary" : ""}`,
|
|
@@ -33184,23 +32945,311 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
33184
32945
|
color: "#333"
|
|
33185
32946
|
}
|
|
33186
32947
|
},
|
|
33187
|
-
/* @__PURE__ */
|
|
33188
|
-
))))), /* @__PURE__ */
|
|
32948
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Tritanopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Blue-blind mode"))
|
|
32949
|
+
))))), /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Footer, { className: "border-0" }, /* @__PURE__ */ import_react61.default.createElement(Button_default2, { variant: "btn-primary", onClick: () => setShowModal(false) }, "Done"))));
|
|
33189
32950
|
};
|
|
33190
32951
|
|
|
33191
|
-
// src/
|
|
33192
|
-
var
|
|
33193
|
-
|
|
33194
|
-
|
|
32952
|
+
// src/components/stateful/ProjectPage.tsx
|
|
32953
|
+
var import_react63 = __toESM(require_react(), 1);
|
|
32954
|
+
|
|
32955
|
+
// src/components/pure/ProjectPageView.tsx
|
|
32956
|
+
var import_react62 = __toESM(require_react(), 1);
|
|
32957
|
+
var BuildLogViewer = ({ logs, runtime }) => {
|
|
32958
|
+
if (!logs)
|
|
32959
|
+
return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "info" }, "Loading ", runtime.toLowerCase(), " build logs...");
|
|
32960
|
+
const hasErrors = logs.errors?.length > 0;
|
|
32961
|
+
const hasWarnings = logs.warnings?.length > 0;
|
|
32962
|
+
const [activeTab, setActiveTab] = import_react62.default.useState("summary");
|
|
32963
|
+
return /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Container, { activeKey: activeTab, onSelect: (k) => setActiveTab(k || "summary") }, /* @__PURE__ */ import_react62.default.createElement(Nav_default2, { variant: "tabs", className: "mb-3" }, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "summary" }, "Build Summary")), /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "warnings" }, hasWarnings ? `\u26A0\uFE0F Warnings (${logs.warnings.length})` : "Warnings")), /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "errors" }, hasErrors ? `\u274C Errors (${logs.errors.length})` : "Errors"))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Content, null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "summary" }, /* @__PURE__ */ import_react62.default.createElement(Card_default, null, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("h5", null, "Build Summary"), /* @__PURE__ */ import_react62.default.createElement("div", null, hasErrors && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "danger", className: "me-2" }, logs.errors.length, " Error", logs.errors.length !== 1 ? "s" : ""), hasWarnings && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "warning", text: "dark" }, logs.warnings.length, " Warning", logs.warnings.length !== 1 ? "s" : ""), !hasErrors && !hasWarnings && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "success" }, "Build Successful"))), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, null, /* @__PURE__ */ import_react62.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ import_react62.default.createElement("h6", null, "Input Files (", Object.keys(logs.metafile?.inputs || {}).length, ")"), /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.inputs || {}).map((file) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react62.default.createElement("code", null, file), /* @__PURE__ */ import_react62.default.createElement("div", { className: "text-muted small" }, logs.metafile.inputs[file].bytes, " bytes"))))), /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement("h6", null, "Output Files (", Object.keys(logs.metafile?.outputs || {}).length, ")"), /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.outputs || {}).map((file) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react62.default.createElement("code", null, file), /* @__PURE__ */ import_react62.default.createElement("div", { className: "text-muted small" }, logs.metafile.outputs[file].bytes, " bytes", logs.metafile.outputs[file].entryPoint && /* @__PURE__ */ import_react62.default.createElement("span", { className: "ms-2 badge bg-info" }, "Entry Point"))))))))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "warnings" }, hasWarnings ? /* @__PURE__ */ import_react62.default.createElement(Card_default, { className: "border-warning" }, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "bg-warning text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("span", null, "Build Warnings (", logs.warnings.length, ")"), /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { variant: "flush" }, logs.warnings.map((warn, i) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: i, className: "text-warning" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react62.default.createElement("strong", null, warn.location?.file || "Unknown file", warn.location?.line && `:${warn.location.line}`), /* @__PURE__ */ import_react62.default.createElement("small", { className: "text-muted" }, warn.pluginName ? `[${warn.pluginName}]` : "")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, warn.text || warn.message || JSON.stringify(warn))), warn.detail && /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1 small text-muted" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, warn.detail))))))) : /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "info" }, "No warnings found")), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "errors" }, hasErrors ? /* @__PURE__ */ import_react62.default.createElement(Card_default, { className: "border-danger" }, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "bg-danger text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("span", null, "Build Errors (", logs.errors.length, ")"), /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { variant: "flush" }, logs.errors.map((err, i) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: i, className: "text-danger" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react62.default.createElement("strong", null, err.location?.file || "Unknown file", err.location?.line && `:${err.location.line}`), /* @__PURE__ */ import_react62.default.createElement("small", { className: "text-muted" }, err.pluginName ? `[${err.pluginName}]` : "")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, err.text || err.message || JSON.stringify(err))), err.detail && /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1 small text-muted" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, err.detail))))))) : /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react62.default.createElement("h5", null, "No Errors Found"), /* @__PURE__ */ import_react62.default.createElement("p", { className: "mb-0" }, "The build completed without any errors."))))));
|
|
32964
|
+
};
|
|
32965
|
+
var ProjectPageView = ({
|
|
32966
|
+
summary,
|
|
32967
|
+
nodeLogs,
|
|
32968
|
+
webLogs,
|
|
32969
|
+
pureLogs,
|
|
32970
|
+
config,
|
|
32971
|
+
loading,
|
|
32972
|
+
error,
|
|
32973
|
+
projectName,
|
|
32974
|
+
route,
|
|
32975
|
+
setRoute,
|
|
32976
|
+
navigate
|
|
32977
|
+
}) => {
|
|
32978
|
+
if (loading)
|
|
32979
|
+
return /* @__PURE__ */ import_react62.default.createElement("div", null, "Loading project data...");
|
|
32980
|
+
if (error)
|
|
32981
|
+
return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
|
|
32982
|
+
if (!summary)
|
|
32983
|
+
return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "warning" }, "No data found for project");
|
|
32984
|
+
const testStatuses = Object.entries(summary).map(([testName2, testData]) => {
|
|
32985
|
+
const runTime = config.tests?.find((t) => t[0] === testName2)?.[1] || "node";
|
|
32986
|
+
return {
|
|
32987
|
+
testName: testName2,
|
|
32988
|
+
testsExist: testData.testsExist !== false,
|
|
32989
|
+
runTimeErrors: Number(testData.runTimeErrors) || 0,
|
|
32990
|
+
typeErrors: Number(testData.typeErrors) || 0,
|
|
32991
|
+
staticErrors: Number(testData.staticErrors) || 0,
|
|
32992
|
+
runTime
|
|
32993
|
+
};
|
|
32994
|
+
});
|
|
32995
|
+
return /* @__PURE__ */ import_react62.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react62.default.createElement(
|
|
32996
|
+
NavBar,
|
|
33195
32997
|
{
|
|
33196
|
-
|
|
33197
|
-
|
|
32998
|
+
title: projectName,
|
|
32999
|
+
backLink: "/",
|
|
33000
|
+
navItems: [
|
|
33001
|
+
{
|
|
33002
|
+
to: `#tests`,
|
|
33003
|
+
label: testStatuses.some((t) => t.runTimeErrors > 0) ? "\u274C Tests" : testStatuses.some((t) => t.typeErrors > 0 || t.staticErrors > 0) ? "\u26A0\uFE0F Tests" : "\u2705 Tests",
|
|
33004
|
+
active: route === "tests",
|
|
33005
|
+
className: testStatuses.some((t) => t.runTimeErrors > 0) ? "text-danger fw-bold" : testStatuses.some((t) => t.typeErrors > 0 || t.staticErrors > 0) ? "text-warning fw-bold" : ""
|
|
33006
|
+
},
|
|
33007
|
+
{
|
|
33008
|
+
to: `#node`,
|
|
33009
|
+
label: nodeLogs?.errors?.length ? "\u274C Node Build" : nodeLogs?.warnings?.length ? "\u26A0\uFE0F Node Build" : "Node Build",
|
|
33010
|
+
active: route === "node",
|
|
33011
|
+
className: nodeLogs?.errors?.length ? "text-danger fw-bold" : nodeLogs?.warnings?.length ? "text-warning fw-bold" : ""
|
|
33012
|
+
},
|
|
33013
|
+
{
|
|
33014
|
+
to: `#web`,
|
|
33015
|
+
label: webLogs?.errors?.length ? "\u274C Web Build" : webLogs?.warnings?.length ? "\u26A0\uFE0F Web Build" : "Web Build",
|
|
33016
|
+
active: route === "web",
|
|
33017
|
+
className: webLogs?.errors?.length ? "text-danger fw-bold" : webLogs?.warnings?.length ? "text-warning fw-bold" : ""
|
|
33018
|
+
},
|
|
33019
|
+
{
|
|
33020
|
+
to: `#pure`,
|
|
33021
|
+
label: pureLogs?.errors?.length ? "\u274C Pure Build" : pureLogs?.warnings?.length ? "\u26A0\uFE0F Pure Build" : "Pure Build",
|
|
33022
|
+
active: route === "pure",
|
|
33023
|
+
className: pureLogs?.errors?.length ? "text-danger fw-bold" : pureLogs?.warnings?.length ? "text-warning fw-bold" : ""
|
|
33024
|
+
}
|
|
33025
|
+
]
|
|
33026
|
+
}
|
|
33027
|
+
), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Container, { activeKey: route, onSelect: (k) => {
|
|
33028
|
+
if (k) {
|
|
33029
|
+
setRoute(k);
|
|
33030
|
+
navigate(`#${k}`, { replace: true });
|
|
33198
33031
|
}
|
|
33199
|
-
|
|
33032
|
+
} }, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Content, null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "tests" }, /* @__PURE__ */ import_react62.default.createElement(Table_default, { striped: true, bordered: true, hover: true }, /* @__PURE__ */ import_react62.default.createElement("thead", null, /* @__PURE__ */ import_react62.default.createElement("tr", null, /* @__PURE__ */ import_react62.default.createElement("th", null, "Test"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Runtime"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Status"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Type Errors"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Lint Errors"))), /* @__PURE__ */ import_react62.default.createElement("tbody", null, testStatuses.map((test) => /* @__PURE__ */ import_react62.default.createElement("tr", { key: test.testName }, /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}` }, test.testName)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "secondary", className: "ms-2" }, test.runTime)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(
|
|
33033
|
+
TestStatusBadge,
|
|
33034
|
+
{
|
|
33035
|
+
testName: test.testName,
|
|
33036
|
+
testsExist: test.testsExist,
|
|
33037
|
+
runTimeErrors: test.runTimeErrors
|
|
33038
|
+
}
|
|
33039
|
+
)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#types` }, test.typeErrors > 0 ? `\u274C ${test.typeErrors}` : "\u2705")), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#lint` }, test.staticErrors > 0 ? `\u274C ${test.staticErrors}` : "\u2705"))))))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "node" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: nodeLogs, runtime: "Node" })), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "web" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: webLogs, runtime: "Web" })), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "pure" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: pureLogs, runtime: "Pure" })))));
|
|
33040
|
+
};
|
|
33041
|
+
|
|
33042
|
+
// src/components/stateful/ProjectPage.tsx
|
|
33043
|
+
var ProjectPage = () => {
|
|
33044
|
+
const [summary, setSummary] = (0, import_react63.useState)(null);
|
|
33045
|
+
const [nodeLogs, setNodeLogs] = (0, import_react63.useState)(null);
|
|
33046
|
+
const [webLogs, setWebLogs] = (0, import_react63.useState)(null);
|
|
33047
|
+
const [pureLogs, setPureLogs] = (0, import_react63.useState)(null);
|
|
33048
|
+
const [config, setConfig] = (0, import_react63.useState)({});
|
|
33049
|
+
const [loading, setLoading] = (0, import_react63.useState)(true);
|
|
33050
|
+
const [error, setError] = (0, import_react63.useState)(null);
|
|
33051
|
+
const [projectName, setProjectName] = (0, import_react63.useState)("");
|
|
33052
|
+
const navigate = useNavigate();
|
|
33053
|
+
const location = useLocation();
|
|
33054
|
+
const [route, setRoute] = (0, import_react63.useState)("tests");
|
|
33055
|
+
(0, import_react63.useEffect)(() => {
|
|
33056
|
+
const hash = location.hash.replace("#", "");
|
|
33057
|
+
if (hash && ["tests", "node", "web", "pure"].includes(hash)) {
|
|
33058
|
+
setRoute(hash);
|
|
33059
|
+
} else {
|
|
33060
|
+
setRoute("tests");
|
|
33061
|
+
}
|
|
33062
|
+
}, [location.hash]);
|
|
33063
|
+
const { projectName: name } = useParams();
|
|
33064
|
+
(0, import_react63.useEffect)(() => {
|
|
33065
|
+
if (!name)
|
|
33066
|
+
return;
|
|
33067
|
+
setProjectName(name);
|
|
33068
|
+
const fetchData = async () => {
|
|
33069
|
+
try {
|
|
33070
|
+
const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
|
|
33071
|
+
fetch(`reports/${name}/summary.json`),
|
|
33072
|
+
fetch(`bundles/node/${name}/metafile.json`),
|
|
33073
|
+
fetch(`bundles/web/${name}/metafile.json`),
|
|
33074
|
+
fetch(`bundles/pure/${name}/metafile.json`),
|
|
33075
|
+
fetch(`reports/${name}/config.json`)
|
|
33076
|
+
]);
|
|
33077
|
+
const [summaryData, nodeData, webData, pureData, configData] = await Promise.all([
|
|
33078
|
+
summaryRes.ok ? summaryRes.json() : {},
|
|
33079
|
+
nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
|
|
33080
|
+
webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
|
|
33081
|
+
pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
|
|
33082
|
+
configRes.ok ? configRes.json() : { tests: [] }
|
|
33083
|
+
]);
|
|
33084
|
+
setSummary(summaryData);
|
|
33085
|
+
setNodeLogs(nodeData);
|
|
33086
|
+
setWebLogs(webData);
|
|
33087
|
+
setPureLogs(pureData);
|
|
33088
|
+
setConfig(configData);
|
|
33089
|
+
} catch (err) {
|
|
33090
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
33091
|
+
} finally {
|
|
33092
|
+
setLoading(false);
|
|
33093
|
+
}
|
|
33094
|
+
};
|
|
33095
|
+
fetchData();
|
|
33096
|
+
}, [name]);
|
|
33097
|
+
return /* @__PURE__ */ import_react63.default.createElement(
|
|
33098
|
+
ProjectPageView,
|
|
33099
|
+
{
|
|
33100
|
+
summary,
|
|
33101
|
+
nodeLogs,
|
|
33102
|
+
webLogs,
|
|
33103
|
+
pureLogs,
|
|
33104
|
+
config,
|
|
33105
|
+
loading,
|
|
33106
|
+
error,
|
|
33107
|
+
projectName,
|
|
33108
|
+
route,
|
|
33109
|
+
setRoute,
|
|
33110
|
+
navigate
|
|
33111
|
+
}
|
|
33112
|
+
);
|
|
33113
|
+
};
|
|
33114
|
+
|
|
33115
|
+
// src/components/stateful/ProjectsPage.tsx
|
|
33116
|
+
var import_react65 = __toESM(require_react(), 1);
|
|
33117
|
+
|
|
33118
|
+
// src/components/pure/ProjectsPageView.tsx
|
|
33119
|
+
var import_react64 = __toESM(require_react(), 1);
|
|
33120
|
+
var ProjectsPageView = ({
|
|
33121
|
+
projects,
|
|
33122
|
+
summaries,
|
|
33123
|
+
configs,
|
|
33124
|
+
loading,
|
|
33125
|
+
error,
|
|
33126
|
+
navigate
|
|
33127
|
+
}) => {
|
|
33128
|
+
const getStatusIcon = (status) => {
|
|
33129
|
+
switch (status) {
|
|
33130
|
+
case "success":
|
|
33131
|
+
return "\u2705";
|
|
33132
|
+
case "failed":
|
|
33133
|
+
return "\u274C";
|
|
33134
|
+
case "warning":
|
|
33135
|
+
return "\u26A0\uFE0F";
|
|
33136
|
+
default:
|
|
33137
|
+
return "\u2753";
|
|
33138
|
+
}
|
|
33139
|
+
};
|
|
33140
|
+
if (loading)
|
|
33141
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", null, "Loading projects...");
|
|
33142
|
+
if (error)
|
|
33143
|
+
return /* @__PURE__ */ import_react64.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
|
|
33144
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react64.default.createElement(NavBar, { title: "Testeranto", backLink: null }), /* @__PURE__ */ import_react64.default.createElement(Table_default, { striped: true, bordered: true, hover: true, responsive: true }, /* @__PURE__ */ import_react64.default.createElement("thead", null, /* @__PURE__ */ import_react64.default.createElement("tr", null, /* @__PURE__ */ import_react64.default.createElement("th", null, "Project"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Tests"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Node"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Web"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Pure"))), /* @__PURE__ */ import_react64.default.createElement("tbody", null, projects.map((project) => /* @__PURE__ */ import_react64.default.createElement("tr", { key: project.name }, /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement("a", { href: "#", onClick: (e) => {
|
|
33145
|
+
e.preventDefault();
|
|
33146
|
+
navigate(`/projects/${project.name}`);
|
|
33147
|
+
} }, project.name)), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement("div", { style: { maxHeight: "200px", overflowY: "auto" } }, summaries[project.name] ? Object.keys(summaries[project.name]).map((testName2) => {
|
|
33148
|
+
const testData = summaries[project.name][testName2];
|
|
33149
|
+
const runTime = configs[project.name].tests.find((t) => t[0] === testName2)[1];
|
|
33150
|
+
const hasRuntimeErrors = testData.runTimeErrors > 0;
|
|
33151
|
+
const hasStaticErrors = testData.typeErrors > 0 || testData.staticErrors > 0;
|
|
33152
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", { key: testName2 }, /* @__PURE__ */ import_react64.default.createElement(
|
|
33153
|
+
"a",
|
|
33154
|
+
{
|
|
33155
|
+
href: `#/projects/${project.name}/tests/${encodeURIComponent(testName2)}/${runTime}`
|
|
33156
|
+
},
|
|
33157
|
+
hasRuntimeErrors ? "\u274C " : hasStaticErrors ? "\u26A0\uFE0F " : "",
|
|
33158
|
+
testName2.split("/").pop()
|
|
33159
|
+
));
|
|
33160
|
+
}) : /* @__PURE__ */ import_react64.default.createElement("div", null, "Loading tests..."))), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
|
|
33161
|
+
"a",
|
|
33162
|
+
{
|
|
33163
|
+
href: `#/projects/${project.name}#node`
|
|
33164
|
+
},
|
|
33165
|
+
getStatusIcon(project.nodeStatus),
|
|
33166
|
+
" Node build logs"
|
|
33167
|
+
)), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
|
|
33168
|
+
"a",
|
|
33169
|
+
{
|
|
33170
|
+
href: `#/projects/${project.name}#web`
|
|
33171
|
+
},
|
|
33172
|
+
getStatusIcon(project.webStatus),
|
|
33173
|
+
" Web build logs"
|
|
33174
|
+
)), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
|
|
33175
|
+
"a",
|
|
33176
|
+
{
|
|
33177
|
+
href: `#/projects/${project.name}#pure`
|
|
33178
|
+
},
|
|
33179
|
+
getStatusIcon(project.pureStatus),
|
|
33180
|
+
" Pure build logs"
|
|
33181
|
+
)))))));
|
|
33182
|
+
};
|
|
33183
|
+
|
|
33184
|
+
// src/components/stateful/ProjectsPage.tsx
|
|
33185
|
+
var ProjectsPage = () => {
|
|
33186
|
+
const [projects, setProjects] = (0, import_react65.useState)([]);
|
|
33187
|
+
const [summaries, setSummaries] = (0, import_react65.useState)({});
|
|
33188
|
+
const [loading, setLoading] = (0, import_react65.useState)(true);
|
|
33189
|
+
const [error, setError] = (0, import_react65.useState)(null);
|
|
33190
|
+
const [configs, setConfigs] = (0, import_react65.useState)({});
|
|
33191
|
+
const navigate = useNavigate();
|
|
33192
|
+
(0, import_react65.useEffect)(() => {
|
|
33193
|
+
const fetchProjects = async () => {
|
|
33194
|
+
try {
|
|
33195
|
+
const projectsRes = await fetch(`projects.json`);
|
|
33196
|
+
const projectNames = await projectsRes.json();
|
|
33197
|
+
const projectsData = await Promise.all(
|
|
33198
|
+
projectNames.map(async (name) => {
|
|
33199
|
+
const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
|
|
33200
|
+
fetch(`reports/${name}/summary.json`),
|
|
33201
|
+
fetch(`bundles/node/${name}/metafile.json`),
|
|
33202
|
+
fetch(`bundles/web/${name}/metafile.json`),
|
|
33203
|
+
fetch(`bundles/pure/${name}/metafile.json`),
|
|
33204
|
+
fetch(`reports/${name}/config.json`)
|
|
33205
|
+
]);
|
|
33206
|
+
const [summary, nodeData, webData, pureData, configData] = await Promise.all([
|
|
33207
|
+
summaryRes.json(),
|
|
33208
|
+
nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
|
|
33209
|
+
webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
|
|
33210
|
+
pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
|
|
33211
|
+
configRes.json()
|
|
33212
|
+
]);
|
|
33213
|
+
setSummaries((prev) => ({ ...prev, [name]: summary }));
|
|
33214
|
+
setConfigs((prev) => ({ ...prev, [name]: configData }));
|
|
33215
|
+
return {
|
|
33216
|
+
name,
|
|
33217
|
+
testCount: Object.keys(summary).length,
|
|
33218
|
+
nodeStatus: nodeData.errors?.length ? "failed" : nodeData.warnings?.length ? "warning" : "success",
|
|
33219
|
+
webStatus: webData.errors?.length ? "failed" : webData.warnings?.length ? "warning" : "success",
|
|
33220
|
+
pureStatus: pureData.errors?.length ? "failed" : pureData.warnings?.length ? "warning" : "success"
|
|
33221
|
+
};
|
|
33222
|
+
})
|
|
33223
|
+
);
|
|
33224
|
+
setProjects(projectsData);
|
|
33225
|
+
} catch (err) {
|
|
33226
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
33227
|
+
} finally {
|
|
33228
|
+
setLoading(false);
|
|
33229
|
+
}
|
|
33230
|
+
};
|
|
33231
|
+
fetchProjects();
|
|
33232
|
+
}, []);
|
|
33233
|
+
return /* @__PURE__ */ import_react65.default.createElement(
|
|
33234
|
+
ProjectsPageView,
|
|
33235
|
+
{
|
|
33236
|
+
projects,
|
|
33237
|
+
summaries,
|
|
33238
|
+
configs,
|
|
33239
|
+
loading,
|
|
33240
|
+
error,
|
|
33241
|
+
navigate
|
|
33242
|
+
}
|
|
33243
|
+
);
|
|
33244
|
+
};
|
|
33245
|
+
|
|
33246
|
+
// src/App.tsx
|
|
33247
|
+
var App = () => {
|
|
33248
|
+
return /* @__PURE__ */ import_react66.default.createElement(HashRouter, null, /* @__PURE__ */ import_react66.default.createElement("div", { className: "d-flex flex-column min-vh-100", key: window.location.pathname }, /* @__PURE__ */ import_react66.default.createElement("main", { className: "flex-grow-1 p-3" }, /* @__PURE__ */ import_react66.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react66.default.createElement(Routes, null, /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/", element: /* @__PURE__ */ import_react66.default.createElement(ProjectsPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName", element: /* @__PURE__ */ import_react66.default.createElement(ProjectPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName/tests/*", element: /* @__PURE__ */ import_react66.default.createElement(TestPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName#:tab", element: /* @__PURE__ */ import_react66.default.createElement(ProjectPage, null) })))), /* @__PURE__ */ import_react66.default.createElement("footer", { className: "bg-light py-3 d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react66.default.createElement(SettingsButton, null)), /* @__PURE__ */ import_react66.default.createElement(Container_default, { className: "text-end", fluid: true }, "made with \u2764\uFE0F and ", /* @__PURE__ */ import_react66.default.createElement("a", { href: "https://www.npmjs.com/package/testeranto" }, "testeranto")))));
|
|
33200
33249
|
};
|
|
33201
33250
|
if (typeof window !== "undefined") {
|
|
33202
33251
|
window.App = App;
|
|
33203
|
-
window.React =
|
|
33252
|
+
window.React = import_react66.default;
|
|
33204
33253
|
window.ReactDOM = import_client.default;
|
|
33205
33254
|
}
|
|
33206
33255
|
})();
|
|
@@ -33287,9 +33336,9 @@ object-assign/index.js:
|
|
|
33287
33336
|
@license MIT
|
|
33288
33337
|
*)
|
|
33289
33338
|
|
|
33290
|
-
react-router/dist/development/chunk-
|
|
33339
|
+
react-router/dist/development/chunk-C37GKA54.mjs:
|
|
33291
33340
|
(**
|
|
33292
|
-
* react-router v7.7.
|
|
33341
|
+
* react-router v7.7.1
|
|
33293
33342
|
*
|
|
33294
33343
|
* Copyright (c) Remix Software Inc.
|
|
33295
33344
|
*
|
|
@@ -33301,7 +33350,7 @@ react-router/dist/development/chunk-EF7DTUVF.mjs:
|
|
|
33301
33350
|
|
|
33302
33351
|
react-router/dist/development/index.mjs:
|
|
33303
33352
|
(**
|
|
33304
|
-
* react-router v7.7.
|
|
33353
|
+
* react-router v7.7.1
|
|
33305
33354
|
*
|
|
33306
33355
|
* Copyright (c) Remix Software Inc.
|
|
33307
33356
|
*
|