sickbay 1.15.4 → 1.15.6
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/{DiffApp-KR745TCV.js → DiffApp-UCBWNYDV.js} +2 -2
- package/dist/{DoctorApp-VKJCRS2I.js → DoctorApp-SUPQ73LO.js} +3 -3
- package/dist/{FixApp-6JU4B3EJ.js → FixApp-DUD426JB.js} +3 -3
- package/dist/{StatsApp-EYYWVSGZ.js → StatsApp-X2Y7LMG5.js} +3 -3
- package/dist/{TrendApp-TB4E7ZUU.js → TrendApp-CYONZAVG.js} +3 -3
- package/dist/{TuiApp-4JRQCD7M.js → TuiApp-NQGIS2T6.js} +4 -4
- package/dist/{chunk-MCHTDD7R.js → chunk-L7KHKFWR.js} +1 -1
- package/dist/{chunk-PD5OA3SZ.js → chunk-UFTUJIJ2.js} +1 -1
- package/dist/{chunk-WEGMDILT.js → chunk-XSQZTZWJ.js} +32 -26
- package/dist/config.js +1 -1
- package/dist/{dist-G7GDVJT5.js → dist-YK4FYTB4.js} +1 -1
- package/dist/index.js +25 -25
- package/dist/{init-BBKWOHRV.js → init-FA6F4WTV.js} +1 -1
- package/dist/{resolve-package-CB3KDANT.js → resolve-package-4UT4RYHY.js} +2 -2
- package/dist/{web-EUG7IJKA.js → web-TCEOS752.js} +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Header
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
4
4
|
|
|
5
5
|
// src/components/DiffApp.tsx
|
|
6
6
|
import React, { useState, useEffect } from "react";
|
|
@@ -119,7 +119,7 @@ function DiffApp({ projectPath, branch, jsonOutput, checks, verbose }) {
|
|
|
119
119
|
useEffect(() => {
|
|
120
120
|
(async () => {
|
|
121
121
|
try {
|
|
122
|
-
const { runSickbay } = await import("./dist-
|
|
122
|
+
const { runSickbay } = await import("./dist-YK4FYTB4.js");
|
|
123
123
|
const currentReport = await runSickbay({
|
|
124
124
|
projectPath,
|
|
125
125
|
checks,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-L7KHKFWR.js";
|
|
4
4
|
import {
|
|
5
5
|
Header
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
7
7
|
import {
|
|
8
8
|
detectPackageManager,
|
|
9
9
|
detectProject
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XSQZTZWJ.js";
|
|
11
11
|
|
|
12
12
|
// src/components/DoctorApp.tsx
|
|
13
13
|
import React, { useState, useEffect } from "react";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-L7KHKFWR.js";
|
|
4
4
|
import {
|
|
5
5
|
ProgressList
|
|
6
6
|
} from "./chunk-MBVA75EM.js";
|
|
7
7
|
import {
|
|
8
8
|
Header
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
10
10
|
import {
|
|
11
11
|
runSickbay
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XSQZTZWJ.js";
|
|
13
13
|
|
|
14
14
|
// src/components/FixApp.tsx
|
|
15
15
|
import React, { useState, useEffect, useCallback } from "react";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-L7KHKFWR.js";
|
|
4
4
|
import {
|
|
5
5
|
Header
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
7
7
|
import {
|
|
8
8
|
detectProject
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XSQZTZWJ.js";
|
|
10
10
|
|
|
11
11
|
// src/components/StatsApp.tsx
|
|
12
12
|
import React, { useState, useEffect } from "react";
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-SHO3ZXTH.js";
|
|
5
5
|
import {
|
|
6
6
|
shortName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-L7KHKFWR.js";
|
|
8
8
|
import {
|
|
9
9
|
Header
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
11
|
+
import "./chunk-XSQZTZWJ.js";
|
|
12
12
|
import {
|
|
13
13
|
detectRegressions,
|
|
14
14
|
loadHistory
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
detectMonorepo,
|
|
15
15
|
runSickbay,
|
|
16
16
|
runSickbayMonorepo
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-XSQZTZWJ.js";
|
|
18
18
|
import {
|
|
19
19
|
loadHistory
|
|
20
20
|
} from "./chunk-3OR2GFVE.js";
|
|
@@ -689,7 +689,7 @@ function TuiApp({
|
|
|
689
689
|
return () => timers.forEach(clearTimeout);
|
|
690
690
|
}, []);
|
|
691
691
|
useEffect7(() => {
|
|
692
|
-
checkForUpdate("1.15.
|
|
692
|
+
checkForUpdate("1.15.5").then((info) => {
|
|
693
693
|
if (info) setUpdateInfo(info);
|
|
694
694
|
});
|
|
695
695
|
}, []);
|
|
@@ -715,7 +715,7 @@ function TuiApp({
|
|
|
715
715
|
} catch {
|
|
716
716
|
}
|
|
717
717
|
try {
|
|
718
|
-
const { getDependencyTree } = await import("./dist-
|
|
718
|
+
const { getDependencyTree } = await import("./dist-YK4FYTB4.js");
|
|
719
719
|
const { saveDepTree } = await import("./history-XLNVZEDI.js");
|
|
720
720
|
const tree = await getDependencyTree(projectPath, result.projectInfo.packageManager);
|
|
721
721
|
saveDepTree(projectPath, tree);
|
|
@@ -819,7 +819,7 @@ function TuiApp({
|
|
|
819
819
|
const webReport = monorepoReportRef.current ?? reportRef.current;
|
|
820
820
|
if (!webReport) return;
|
|
821
821
|
try {
|
|
822
|
-
const { serveWeb } = await import("./web-
|
|
822
|
+
const { serveWeb } = await import("./web-TCEOS752.js");
|
|
823
823
|
const { default: openBrowser } = await import("open");
|
|
824
824
|
let aiService;
|
|
825
825
|
if (withAI && process.env.ANTHROPIC_API_KEY && !monorepoReportRef.current) {
|
|
@@ -11,7 +11,7 @@ var ASCII_ART = `
|
|
|
11
11
|
A vitals health check for your app
|
|
12
12
|
`.trim();
|
|
13
13
|
function Header({ projectName }) {
|
|
14
|
-
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "green" }, ASCII_ART), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " v", "1.15.
|
|
14
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "green" }, ASCII_ART), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " v", "1.15.5")), projectName && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " Analyzing "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: "white" }, projectName)));
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ../../packages/core/dist/index.js
|
|
2
2
|
import { existsSync as existsSync27, readFileSync as readFileSync31 } from "fs";
|
|
3
|
-
import { basename as basename3, join as join38, relative as
|
|
3
|
+
import { basename as basename3, join as join38, relative as relative3 } from "path";
|
|
4
4
|
import { readFileSync, readdirSync, statSync, existsSync } from "fs";
|
|
5
5
|
import { join, extname } from "path";
|
|
6
6
|
import { readFileSync as readFileSync2, readdirSync as readdirSync2, existsSync as existsSync2 } from "fs";
|
|
@@ -14,7 +14,7 @@ import { join as join5, resolve } from "path";
|
|
|
14
14
|
import { readFileSync as readFileSync6, existsSync as existsSync7 } from "fs";
|
|
15
15
|
import { join as join7 } from "path";
|
|
16
16
|
import { existsSync as existsSync6, readFileSync as readFileSync5 } from "fs";
|
|
17
|
-
import { join as join6,
|
|
17
|
+
import { dirname, join as join6, relative, sep } from "path";
|
|
18
18
|
import { fileURLToPath } from "url";
|
|
19
19
|
import { execa } from "execa";
|
|
20
20
|
import { readdirSync as readdirSync4, statSync as statSync3, readFileSync as readFileSync7 } from "fs";
|
|
@@ -75,7 +75,7 @@ import { join as join29 } from "path";
|
|
|
75
75
|
import { readFileSync as readFileSync25, existsSync as existsSync20 } from "fs";
|
|
76
76
|
import { join as join30 } from "path";
|
|
77
77
|
import { existsSync as existsSync21 } from "fs";
|
|
78
|
-
import { dirname as dirname4, join as join31, relative } from "path";
|
|
78
|
+
import { dirname as dirname4, join as join31, relative as relative2 } from "path";
|
|
79
79
|
import { execa as execa10 } from "execa";
|
|
80
80
|
import { execa as execa11 } from "execa";
|
|
81
81
|
import { existsSync as existsSync22, readFileSync as readFileSync26, readdirSync as readdirSync16, statSync as statSync15 } from "fs";
|
|
@@ -832,9 +832,12 @@ function readPackageJson(projectPath) {
|
|
|
832
832
|
return JSON.parse(readFileSync5(pkgPath, "utf-8"));
|
|
833
833
|
}
|
|
834
834
|
async function isCommandAvailable(cmd) {
|
|
835
|
-
|
|
835
|
+
const binDir = join6(coreLocalDir, "node_modules", ".bin");
|
|
836
|
+
const localCandidates = process.platform === "win32" ? [cmd, `${cmd}.cmd`, `${cmd}.exe`, `${cmd}.ps1`] : [cmd];
|
|
837
|
+
if (localCandidates.some((c) => existsSync6(join6(binDir, c)))) return true;
|
|
838
|
+
const lookupCmd = process.platform === "win32" ? "where" : "which";
|
|
836
839
|
try {
|
|
837
|
-
await execa(
|
|
840
|
+
await execa(lookupCmd, [cmd]);
|
|
838
841
|
return true;
|
|
839
842
|
} catch {
|
|
840
843
|
return false;
|
|
@@ -843,6 +846,9 @@ async function isCommandAvailable(cmd) {
|
|
|
843
846
|
function fileExists(projectPath, ...parts) {
|
|
844
847
|
return existsSync6(join6(projectPath, ...parts));
|
|
845
848
|
}
|
|
849
|
+
function relativeFromRoot(projectRoot, fullPath) {
|
|
850
|
+
return relative(projectRoot, fullPath).split(sep).join("/");
|
|
851
|
+
}
|
|
846
852
|
function timer() {
|
|
847
853
|
const start = Date.now();
|
|
848
854
|
return () => Date.now() - start;
|
|
@@ -1095,7 +1101,7 @@ function findComponentFiles(dir, projectRoot, isRoot = true) {
|
|
|
1095
1101
|
if (stat.isDirectory()) {
|
|
1096
1102
|
files.push(...findComponentFiles(fullPath, projectRoot, false));
|
|
1097
1103
|
} else if (entry.endsWith(".component.ts")) {
|
|
1098
|
-
files.push({ relPath:
|
|
1104
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
1099
1105
|
}
|
|
1100
1106
|
}
|
|
1101
1107
|
} catch (err) {
|
|
@@ -1217,7 +1223,7 @@ function findRouteFiles(dir, projectRoot, topLevel = true) {
|
|
|
1217
1223
|
if (stat.isDirectory()) {
|
|
1218
1224
|
files.push(...findRouteFiles(fullPath, projectRoot, false));
|
|
1219
1225
|
} else if (entry.endsWith(".routes.ts") || entry === "app.config.ts") {
|
|
1220
|
-
files.push({ relPath:
|
|
1226
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
1221
1227
|
}
|
|
1222
1228
|
}
|
|
1223
1229
|
return files;
|
|
@@ -1313,7 +1319,7 @@ function findSourceFiles(dir, projectRoot, isRoot = true) {
|
|
|
1313
1319
|
if (stat.isDirectory()) {
|
|
1314
1320
|
files.push(...findSourceFiles(fullPath, projectRoot, false));
|
|
1315
1321
|
} else if (entry.endsWith(".ts") || entry.endsWith(".html")) {
|
|
1316
|
-
files.push({ relPath:
|
|
1322
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
1317
1323
|
}
|
|
1318
1324
|
}
|
|
1319
1325
|
} catch (err) {
|
|
@@ -1497,7 +1503,7 @@ function findComponentFiles2(dir, projectRoot, isRoot = true) {
|
|
|
1497
1503
|
if (stat.isDirectory()) {
|
|
1498
1504
|
files.push(...findComponentFiles2(fullPath, projectRoot, false));
|
|
1499
1505
|
} else if (entry.endsWith(".component.ts")) {
|
|
1500
|
-
files.push({ relPath:
|
|
1506
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
1501
1507
|
}
|
|
1502
1508
|
}
|
|
1503
1509
|
} catch (err) {
|
|
@@ -1638,7 +1644,7 @@ function findComponentFiles3(dir, projectRoot, isRoot = true) {
|
|
|
1638
1644
|
if (stat.isDirectory()) {
|
|
1639
1645
|
files.push(...findComponentFiles3(fullPath, projectRoot, false));
|
|
1640
1646
|
} else if (entry.endsWith(".component.ts")) {
|
|
1641
|
-
files.push({ relPath:
|
|
1647
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
1642
1648
|
}
|
|
1643
1649
|
}
|
|
1644
1650
|
} catch (err) {
|
|
@@ -1804,7 +1810,7 @@ function scanAssets(dir, projectRoot, assets, isExcluded) {
|
|
|
1804
1810
|
for (const entry of readdirSync9(dir)) {
|
|
1805
1811
|
if (entry.startsWith(".") || entry === "node_modules") continue;
|
|
1806
1812
|
const fullPath = join14(dir, entry);
|
|
1807
|
-
const relPath =
|
|
1813
|
+
const relPath = relativeFromRoot(projectRoot, fullPath);
|
|
1808
1814
|
if (isExcluded(relPath)) continue;
|
|
1809
1815
|
const stat = statSync8(fullPath);
|
|
1810
1816
|
if (stat.isDirectory()) {
|
|
@@ -1818,7 +1824,7 @@ function scanAssets(dir, projectRoot, assets, isExcluded) {
|
|
|
1818
1824
|
else if (FONT_EXTENSIONS.has(ext)) type = "font";
|
|
1819
1825
|
else continue;
|
|
1820
1826
|
assets.push({
|
|
1821
|
-
path:
|
|
1827
|
+
path: relativeFromRoot(projectRoot, fullPath),
|
|
1822
1828
|
size: stat.size,
|
|
1823
1829
|
type
|
|
1824
1830
|
});
|
|
@@ -1998,7 +2004,7 @@ function scanDirectory(dir, projectRoot, isExcluded) {
|
|
|
1998
2004
|
if (stat.isDirectory()) {
|
|
1999
2005
|
files.push(...scanDirectory(fullPath, projectRoot, isExcluded));
|
|
2000
2006
|
} else if (SOURCE_EXTENSIONS.has(extname5(entry)) && !isTestFile(entry)) {
|
|
2001
|
-
const relPath =
|
|
2007
|
+
const relPath = relativeFromRoot(projectRoot, fullPath);
|
|
2002
2008
|
if (isExcluded(relPath)) continue;
|
|
2003
2009
|
try {
|
|
2004
2010
|
const lines = readFileSync13(fullPath, "utf-8").split("\n").filter((l) => l.trim()).length;
|
|
@@ -2478,7 +2484,7 @@ var ESLintRunner = class extends BaseRunner {
|
|
|
2478
2484
|
totalErrors += file.errorCount;
|
|
2479
2485
|
totalWarnings += file.warningCount;
|
|
2480
2486
|
if (file.errorCount > 0 || file.warningCount > 0) {
|
|
2481
|
-
const relPath =
|
|
2487
|
+
const relPath = relativeFromRoot(projectPath, file.filePath);
|
|
2482
2488
|
const parts = [];
|
|
2483
2489
|
if (file.errorCount > 0)
|
|
2484
2490
|
parts.push(`${file.errorCount} error${file.errorCount > 1 ? "s" : ""}`);
|
|
@@ -3211,7 +3217,7 @@ function findJsxFiles(dir, projectRoot, isRoot = true) {
|
|
|
3211
3217
|
if (stat.isDirectory()) {
|
|
3212
3218
|
files.push(...findJsxFiles(fullPath, projectRoot, false));
|
|
3213
3219
|
} else if (entry.endsWith(".tsx") || entry.endsWith(".jsx")) {
|
|
3214
|
-
files.push({ relPath:
|
|
3220
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
3215
3221
|
}
|
|
3216
3222
|
}
|
|
3217
3223
|
} catch (err) {
|
|
@@ -3368,7 +3374,7 @@ function findJsxFiles2(dir, projectRoot, isRoot = true) {
|
|
|
3368
3374
|
if (stat.isDirectory()) {
|
|
3369
3375
|
files.push(...findJsxFiles2(fullPath, projectRoot, false));
|
|
3370
3376
|
} else if (entry.endsWith(".tsx") || entry.endsWith(".jsx")) {
|
|
3371
|
-
files.push({ relPath:
|
|
3377
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
3372
3378
|
}
|
|
3373
3379
|
}
|
|
3374
3380
|
} catch (err) {
|
|
@@ -3455,7 +3461,7 @@ function findJsxFiles3(dir, projectRoot, isRoot = true) {
|
|
|
3455
3461
|
if (stat.isDirectory()) {
|
|
3456
3462
|
files.push(...findJsxFiles3(fullPath, projectRoot, false));
|
|
3457
3463
|
} else if (entry.endsWith(".tsx") || entry.endsWith(".jsx")) {
|
|
3458
|
-
files.push({ relPath:
|
|
3464
|
+
files.push({ relPath: relativeFromRoot(projectRoot, fullPath), fullPath });
|
|
3459
3465
|
}
|
|
3460
3466
|
}
|
|
3461
3467
|
} catch (err) {
|
|
@@ -3484,7 +3490,7 @@ var NextMissingBoundariesRunner = class extends BaseRunner {
|
|
|
3484
3490
|
let missingError = 0;
|
|
3485
3491
|
for (const pageDir of pageDirs) {
|
|
3486
3492
|
segmentsChecked++;
|
|
3487
|
-
const relDir =
|
|
3493
|
+
const relDir = relativeFromRoot(projectPath, pageDir);
|
|
3488
3494
|
if (!existsSync16(join26(pageDir, "loading.tsx")) && !existsSync16(join26(pageDir, "loading.jsx"))) {
|
|
3489
3495
|
missingLoading++;
|
|
3490
3496
|
issues.push({
|
|
@@ -4110,7 +4116,7 @@ function filterPnpmAdvisories(advisories, projectPath) {
|
|
|
4110
4116
|
if (!workspaceRoot || workspaceRoot === projectPath) {
|
|
4111
4117
|
return advisories;
|
|
4112
4118
|
}
|
|
4113
|
-
const importerPrefix =
|
|
4119
|
+
const importerPrefix = relative2(workspaceRoot, projectPath).replace(/\//g, "__");
|
|
4114
4120
|
const filtered = {};
|
|
4115
4121
|
for (const [id, advisory] of Object.entries(advisories)) {
|
|
4116
4122
|
const isRelevant = advisory.findings.some(
|
|
@@ -4321,7 +4327,7 @@ function scanDirectory2(dir, projectRoot, isExcluded) {
|
|
|
4321
4327
|
if (entry.startsWith(".") || entry === "node_modules" || entry === "__tests__" || entry === "__mocks__" || entry.includes(".test.") || entry.includes(".spec."))
|
|
4322
4328
|
continue;
|
|
4323
4329
|
const fullPath = join32(dir, entry);
|
|
4324
|
-
const relPath =
|
|
4330
|
+
const relPath = relativeFromRoot(projectRoot, fullPath);
|
|
4325
4331
|
if (isExcluded(relPath)) continue;
|
|
4326
4332
|
const stat = statSync15(fullPath);
|
|
4327
4333
|
if (stat.isDirectory()) {
|
|
@@ -4331,7 +4337,7 @@ function scanDirectory2(dir, projectRoot, isExcluded) {
|
|
|
4331
4337
|
const content = readFileSync26(fullPath, "utf-8");
|
|
4332
4338
|
const lineCount = content.split("\n").length;
|
|
4333
4339
|
files.push({
|
|
4334
|
-
path:
|
|
4340
|
+
path: relativeFromRoot(projectRoot, fullPath),
|
|
4335
4341
|
fullPath,
|
|
4336
4342
|
lines: lineCount
|
|
4337
4343
|
});
|
|
@@ -4547,7 +4553,7 @@ function scanDirectory3(dir, projectRoot, isExcluded) {
|
|
|
4547
4553
|
if (entry.startsWith(".") || entry === "node_modules" || entry === "__tests__" || entry === "test" || entry === "tests")
|
|
4548
4554
|
continue;
|
|
4549
4555
|
const fullPath = join33(dir, entry);
|
|
4550
|
-
const relPath =
|
|
4556
|
+
const relPath = relativeFromRoot(projectRoot, fullPath);
|
|
4551
4557
|
if (isExcluded(relPath)) continue;
|
|
4552
4558
|
const stat = statSync16(fullPath);
|
|
4553
4559
|
if (stat.isDirectory()) {
|
|
@@ -4591,7 +4597,7 @@ function scanFile(filePath, projectRoot) {
|
|
|
4591
4597
|
try {
|
|
4592
4598
|
const content = readFileSync27(filePath, "utf-8");
|
|
4593
4599
|
const lines = content.split("\n");
|
|
4594
|
-
const relPath =
|
|
4600
|
+
const relPath = relativeFromRoot(projectRoot, filePath);
|
|
4595
4601
|
for (let i = 0; i < lines.length; i++) {
|
|
4596
4602
|
const line = lines[i];
|
|
4597
4603
|
if (line.includes("process.env") || line.includes("import.meta.env")) continue;
|
|
@@ -4867,7 +4873,7 @@ function scanDirectory4(dir, projectRoot, pattern, isExcluded) {
|
|
|
4867
4873
|
if (entry.startsWith(".") || entry === "node_modules") continue;
|
|
4868
4874
|
if (SELF_REFERENCING_FILES.has(entry)) continue;
|
|
4869
4875
|
const fullPath = join35(dir, entry);
|
|
4870
|
-
const relPath =
|
|
4876
|
+
const relPath = relativeFromRoot(projectRoot, fullPath);
|
|
4871
4877
|
if (isExcluded(relPath)) continue;
|
|
4872
4878
|
const stat = statSync18(fullPath);
|
|
4873
4879
|
if (stat.isDirectory()) {
|
|
@@ -4884,7 +4890,7 @@ function scanFile2(filePath, projectRoot, pattern) {
|
|
|
4884
4890
|
const todos = [];
|
|
4885
4891
|
try {
|
|
4886
4892
|
const lines = readFileSync29(filePath, "utf-8").split("\n");
|
|
4887
|
-
const relPath =
|
|
4893
|
+
const relPath = relativeFromRoot(projectRoot, filePath);
|
|
4888
4894
|
for (let i = 0; i < lines.length; i++) {
|
|
4889
4895
|
const match = stripStringLiterals(lines[i]).match(pattern);
|
|
4890
4896
|
if (match) {
|
|
@@ -5432,7 +5438,7 @@ async function runSickbayMonorepo(options = {}) {
|
|
|
5432
5438
|
const packageReport = {
|
|
5433
5439
|
name: report.projectInfo.name,
|
|
5434
5440
|
path: pkgPath,
|
|
5435
|
-
relativePath:
|
|
5441
|
+
relativePath: relative3(rootPath, pkgPath),
|
|
5436
5442
|
framework: report.projectInfo.framework,
|
|
5437
5443
|
runtime: context.runtime,
|
|
5438
5444
|
checks: report.checks,
|
package/dist/config.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
} from "./chunk-TYG7ZQBP.js";
|
|
9
9
|
import {
|
|
10
10
|
Header
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UFTUJIJ2.js";
|
|
12
12
|
import {
|
|
13
13
|
getScoreEmoji,
|
|
14
14
|
runSickbay,
|
|
15
15
|
runSickbayMonorepo
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XSQZTZWJ.js";
|
|
17
17
|
|
|
18
18
|
// src/index.ts
|
|
19
19
|
import { existsSync } from "fs";
|
|
@@ -190,7 +190,7 @@ function App({
|
|
|
190
190
|
setMonorepoReport(r);
|
|
191
191
|
setProjectName(`monorepo (${r.packages.length} packages)`);
|
|
192
192
|
try {
|
|
193
|
-
const { getDependencyTree } = await import("./dist-
|
|
193
|
+
const { getDependencyTree } = await import("./dist-YK4FYTB4.js");
|
|
194
194
|
const { saveDepTree } = await import("./history-XLNVZEDI.js");
|
|
195
195
|
const packages = {};
|
|
196
196
|
for (const pkg of r.packages) {
|
|
@@ -202,7 +202,7 @@ function App({
|
|
|
202
202
|
if (openWeb) {
|
|
203
203
|
setPhase("opening-web");
|
|
204
204
|
try {
|
|
205
|
-
const { serveWeb } = await import("./web-
|
|
205
|
+
const { serveWeb } = await import("./web-TCEOS752.js");
|
|
206
206
|
const { default: openBrowser } = await import("open");
|
|
207
207
|
let aiService;
|
|
208
208
|
if (enableAI && process.env.ANTHROPIC_API_KEY) {
|
|
@@ -259,7 +259,7 @@ function App({
|
|
|
259
259
|
} catch {
|
|
260
260
|
}
|
|
261
261
|
try {
|
|
262
|
-
const { getDependencyTree } = await import("./dist-
|
|
262
|
+
const { getDependencyTree } = await import("./dist-YK4FYTB4.js");
|
|
263
263
|
const { saveDepTree } = await import("./history-XLNVZEDI.js");
|
|
264
264
|
const tree = await getDependencyTree(projectPath, r.projectInfo.packageManager);
|
|
265
265
|
saveDepTree(projectPath, tree);
|
|
@@ -268,7 +268,7 @@ function App({
|
|
|
268
268
|
if (openWeb) {
|
|
269
269
|
setPhase("opening-web");
|
|
270
270
|
try {
|
|
271
|
-
const { serveWeb } = await import("./web-
|
|
271
|
+
const { serveWeb } = await import("./web-TCEOS752.js");
|
|
272
272
|
const { default: openBrowser } = await import("open");
|
|
273
273
|
let aiService;
|
|
274
274
|
if (enableAI && process.env.ANTHROPIC_API_KEY) {
|
|
@@ -317,7 +317,7 @@ if (existsSync(globalConfigPath)) {
|
|
|
317
317
|
}
|
|
318
318
|
config({ debug: false, quiet: true });
|
|
319
319
|
var program = new Command();
|
|
320
|
-
program.name("sickbay").description("React project health check CLI").version("1.15.
|
|
320
|
+
program.name("sickbay").description("React project health check CLI").version("1.15.5", "-v, --version").enablePositionalOptions().passThroughOptions().option("-p, --path <path>", "project path to analyze", process.cwd()).option("-c, --checks <checks>", "comma-separated list of checks to run").option("--package <name>", "scope to a single named package (monorepo only)").option("--json", "output raw JSON report").option("--web", "open web dashboard after scan").option("--no-ai", "disable AI features").option("--no-quotes", "suppress personality quotes in output").option("--verbose", "show verbose output").action(async (options) => {
|
|
321
321
|
if (options.path && options.path !== process.cwd()) {
|
|
322
322
|
const projectEnvPath = join(options.path, ".env");
|
|
323
323
|
if (existsSync(projectEnvPath)) {
|
|
@@ -327,13 +327,13 @@ program.name("sickbay").description("React project health check CLI").version("1
|
|
|
327
327
|
const updatePromise = (async () => {
|
|
328
328
|
try {
|
|
329
329
|
const { checkForUpdate } = await import("./update-check-M7IFOMLJ.js");
|
|
330
|
-
return await checkForUpdate("1.15.
|
|
330
|
+
return await checkForUpdate("1.15.5");
|
|
331
331
|
} catch {
|
|
332
332
|
return null;
|
|
333
333
|
}
|
|
334
334
|
})();
|
|
335
335
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
336
|
-
const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-
|
|
336
|
+
const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-YK4FYTB4.js");
|
|
337
337
|
const monorepoInfo = await detectMonorepo(options.path);
|
|
338
338
|
if (options.package && monorepoInfo.isMonorepo) {
|
|
339
339
|
const { readFileSync } = await import("fs");
|
|
@@ -397,7 +397,7 @@ program.name("sickbay").description("React project health check CLI").version("1
|
|
|
397
397
|
} catch {
|
|
398
398
|
}
|
|
399
399
|
try {
|
|
400
|
-
const { getDependencyTree } = await import("./dist-
|
|
400
|
+
const { getDependencyTree } = await import("./dist-YK4FYTB4.js");
|
|
401
401
|
const { saveDepTree } = await import("./history-XLNVZEDI.js");
|
|
402
402
|
const tree = await getDependencyTree(options.path, report.projectInfo.packageManager);
|
|
403
403
|
saveDepTree(options.path, tree);
|
|
@@ -424,16 +424,16 @@ program.command("init").description("Initialize .sickbay/ folder and run an init
|
|
|
424
424
|
"add newly available checks to existing config without touching existing entries"
|
|
425
425
|
).option("--reset-config", "regenerate config from scratch (overwrites existing)").action(async (options) => {
|
|
426
426
|
if (options.resetConfig) {
|
|
427
|
-
const { generateConfigFile } = await import("./init-
|
|
427
|
+
const { generateConfigFile } = await import("./init-FA6F4WTV.js");
|
|
428
428
|
await generateConfigFile(options.path, { force: true });
|
|
429
429
|
return;
|
|
430
430
|
}
|
|
431
431
|
if (options.sync) {
|
|
432
|
-
const { syncConfigFile } = await import("./init-
|
|
432
|
+
const { syncConfigFile } = await import("./init-FA6F4WTV.js");
|
|
433
433
|
await syncConfigFile(options.path);
|
|
434
434
|
return;
|
|
435
435
|
}
|
|
436
|
-
const { initSickbay } = await import("./init-
|
|
436
|
+
const { initSickbay } = await import("./init-FA6F4WTV.js");
|
|
437
437
|
await initSickbay(options.path);
|
|
438
438
|
});
|
|
439
439
|
program.command("fix").description("Interactively fix issues found by sickbay scan").option("-p, --path <path>", "project path to analyze", process.cwd()).option("-c, --checks <checks>", "comma-separated list of checks to run").option("--package <name>", "scope to a single package (monorepo only)").option("--all", "apply all available fixes without prompting").option("--dry-run", "show what would be fixed without executing").option("--verbose", "show verbose output").action(async (options) => {
|
|
@@ -443,9 +443,9 @@ program.command("fix").description("Interactively fix issues found by sickbay sc
|
|
|
443
443
|
config({ path: projectEnvPath, override: true });
|
|
444
444
|
}
|
|
445
445
|
}
|
|
446
|
-
const { resolveProject } = await import("./resolve-package-
|
|
446
|
+
const { resolveProject } = await import("./resolve-package-4UT4RYHY.js");
|
|
447
447
|
const resolution = await resolveProject(options.path, options.package);
|
|
448
|
-
const { FixApp } = await import("./FixApp-
|
|
448
|
+
const { FixApp } = await import("./FixApp-DUD426JB.js");
|
|
449
449
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
450
450
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
451
451
|
render(
|
|
@@ -468,10 +468,10 @@ program.command("trend").description("Show score history and trends over time").
|
|
|
468
468
|
config({ path: projectEnvPath, override: true });
|
|
469
469
|
}
|
|
470
470
|
}
|
|
471
|
-
const { resolveProject } = await import("./resolve-package-
|
|
471
|
+
const { resolveProject } = await import("./resolve-package-4UT4RYHY.js");
|
|
472
472
|
const resolution = await resolveProject(options.path, options.package);
|
|
473
473
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
474
|
-
const { TrendApp } = await import("./TrendApp-
|
|
474
|
+
const { TrendApp } = await import("./TrendApp-CYONZAVG.js");
|
|
475
475
|
render(
|
|
476
476
|
React7.createElement(TrendApp, {
|
|
477
477
|
projectPath,
|
|
@@ -490,10 +490,10 @@ program.command("stats").description("Show a quick codebase overview and project
|
|
|
490
490
|
config({ path: projectEnvPath, override: true });
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
|
-
const { resolveProject } = await import("./resolve-package-
|
|
493
|
+
const { resolveProject } = await import("./resolve-package-4UT4RYHY.js");
|
|
494
494
|
const resolution = await resolveProject(options.path, options.package);
|
|
495
495
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
496
|
-
const { StatsApp } = await import("./StatsApp-
|
|
496
|
+
const { StatsApp } = await import("./StatsApp-X2Y7LMG5.js");
|
|
497
497
|
render(
|
|
498
498
|
React7.createElement(StatsApp, {
|
|
499
499
|
projectPath,
|
|
@@ -505,7 +505,7 @@ program.command("stats").description("Show a quick codebase overview and project
|
|
|
505
505
|
);
|
|
506
506
|
});
|
|
507
507
|
program.command("tui").description("Launch the persistent developer dashboard").option("-p, --path <path>", "project path to monitor", process.cwd()).option("--no-watch", "disable file-watching auto-refresh").option("--no-quotes", "suppress personality quotes in output").option("--refresh <seconds>", "auto-refresh interval in seconds", "300").option("-c, --checks <checks>", "comma-separated list of checks to run").action(async (options) => {
|
|
508
|
-
const { TuiApp } = await import("./TuiApp-
|
|
508
|
+
const { TuiApp } = await import("./TuiApp-NQGIS2T6.js");
|
|
509
509
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
510
510
|
render(
|
|
511
511
|
React7.createElement(TuiApp, {
|
|
@@ -525,10 +525,10 @@ program.command("doctor").description("Diagnose project setup and configuration
|
|
|
525
525
|
config({ path: projectEnvPath, override: true });
|
|
526
526
|
}
|
|
527
527
|
}
|
|
528
|
-
const { resolveProject } = await import("./resolve-package-
|
|
528
|
+
const { resolveProject } = await import("./resolve-package-4UT4RYHY.js");
|
|
529
529
|
const resolution = await resolveProject(options.path, options.package);
|
|
530
530
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
531
|
-
const { DoctorApp } = await import("./DoctorApp-
|
|
531
|
+
const { DoctorApp } = await import("./DoctorApp-SUPQ73LO.js");
|
|
532
532
|
render(
|
|
533
533
|
React7.createElement(DoctorApp, {
|
|
534
534
|
projectPath,
|
|
@@ -541,13 +541,13 @@ program.command("doctor").description("Diagnose project setup and configuration
|
|
|
541
541
|
);
|
|
542
542
|
});
|
|
543
543
|
program.command("badge").description("Generate a health score badge for your README").option("-p, --path <path>", "project path", process.cwd()).option("--package <name>", "scope to a single package (monorepo only)").option("--html", "output HTML <img> tag instead of markdown").option("--url", "output bare badge URL only").option("--label <text>", "custom badge label", "sickbay").option("--scan", "run a fresh scan instead of using last report").action(async (options) => {
|
|
544
|
-
const { resolveProject } = await import("./resolve-package-
|
|
544
|
+
const { resolveProject } = await import("./resolve-package-4UT4RYHY.js");
|
|
545
545
|
const resolution = await resolveProject(options.path, options.package);
|
|
546
546
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
547
547
|
const { loadScoreFromLastReport, badgeUrl, badgeMarkdown, badgeHtml } = await import("./badge-KQ73KEIN.js");
|
|
548
548
|
let score = options.scan ? null : loadScoreFromLastReport(projectPath);
|
|
549
549
|
if (score === null) {
|
|
550
|
-
const { runSickbay: runSickbay2 } = await import("./dist-
|
|
550
|
+
const { runSickbay: runSickbay2 } = await import("./dist-YK4FYTB4.js");
|
|
551
551
|
const report = await runSickbay2({ projectPath, quotes: false });
|
|
552
552
|
try {
|
|
553
553
|
const { saveEntry, saveLastReport } = await import("./history-XLNVZEDI.js");
|
|
@@ -580,7 +580,7 @@ program.command("diff <branch>").description("Compare health score against anoth
|
|
|
580
580
|
}
|
|
581
581
|
}
|
|
582
582
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
583
|
-
const { DiffApp } = await import("./DiffApp-
|
|
583
|
+
const { DiffApp } = await import("./DiffApp-UCBWNYDV.js");
|
|
584
584
|
render(
|
|
585
585
|
React7.createElement(DiffApp, {
|
|
586
586
|
projectPath: options.path,
|
|
@@ -106,7 +106,7 @@ async function serveWeb(report, preferredPort = 3030, aiService) {
|
|
|
106
106
|
if (url === "/sickbay-config.json") {
|
|
107
107
|
const basePath = "isMonorepo" in report ? report.rootPath : report.projectPath;
|
|
108
108
|
try {
|
|
109
|
-
const { loadConfig } = await import("./dist-
|
|
109
|
+
const { loadConfig } = await import("./dist-YK4FYTB4.js");
|
|
110
110
|
const config = await loadConfig(basePath);
|
|
111
111
|
if (config) {
|
|
112
112
|
res.writeHead(200, { "Content-Type": "application/json" });
|