@simpleapps-com/augur-config 2.2.8 → 2.2.9
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/bin/augur-doctor.mjs +132 -1
- package/package.json +1 -1
package/bin/augur-doctor.mjs
CHANGED
|
@@ -340,6 +340,37 @@ if (prettierFile && fileContains(prettierFile, "augur-config/prettier")) {
|
|
|
340
340
|
fail("prettier", "Prettier config exists", "No Prettier config found");
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
+
// 7d. Knip for dead code detection
|
|
344
|
+
const knipConfigFile = findFile(
|
|
345
|
+
"knip.json",
|
|
346
|
+
"knip.jsonc",
|
|
347
|
+
"knip.ts",
|
|
348
|
+
"knip.config.ts",
|
|
349
|
+
"knip.config.js"
|
|
350
|
+
);
|
|
351
|
+
const hasKnipDep = !!(pkg?.devDependencies?.knip || pkg?.dependencies?.knip);
|
|
352
|
+
if (knipConfigFile && hasKnipDep) {
|
|
353
|
+
pass("knip", "Knip configured for dead code detection", knipConfigFile);
|
|
354
|
+
} else if (hasKnipDep && !knipConfigFile) {
|
|
355
|
+
warn(
|
|
356
|
+
"knip",
|
|
357
|
+
"Knip installed but no config file found",
|
|
358
|
+
"Add knip.json or knip.ts -- see https://knip.dev/overview/configuration"
|
|
359
|
+
);
|
|
360
|
+
} else if (knipConfigFile && !hasKnipDep) {
|
|
361
|
+
fail(
|
|
362
|
+
"knip",
|
|
363
|
+
"Knip for dead code detection",
|
|
364
|
+
"Config exists but knip not in devDependencies -- run pnpm add -D knip"
|
|
365
|
+
);
|
|
366
|
+
} else {
|
|
367
|
+
fail(
|
|
368
|
+
"knip",
|
|
369
|
+
"Knip for dead code detection",
|
|
370
|
+
"Add knip to devDependencies and create knip.json -- see https://knip.dev"
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
|
|
343
374
|
// 8-12. next.config checks
|
|
344
375
|
const nextConfigFile = findFile(
|
|
345
376
|
"next.config.ts",
|
|
@@ -763,6 +794,105 @@ if (pkg) {
|
|
|
763
794
|
}
|
|
764
795
|
}
|
|
765
796
|
|
|
797
|
+
// ---------------------------------------------------------------------------
|
|
798
|
+
// 23-24. Augur package version checks
|
|
799
|
+
// ---------------------------------------------------------------------------
|
|
800
|
+
|
|
801
|
+
const augurPackageNames = [
|
|
802
|
+
"@simpleapps-com/augur-config",
|
|
803
|
+
"@simpleapps-com/augur-core",
|
|
804
|
+
"@simpleapps-com/augur-hooks",
|
|
805
|
+
"@simpleapps-com/augur-mobile",
|
|
806
|
+
"@simpleapps-com/augur-server",
|
|
807
|
+
"@simpleapps-com/augur-tailwind",
|
|
808
|
+
"@simpleapps-com/augur-utils",
|
|
809
|
+
"@simpleapps-com/augur-web",
|
|
810
|
+
];
|
|
811
|
+
|
|
812
|
+
if (pkg) {
|
|
813
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
814
|
+
|
|
815
|
+
// Collect installed augur packages and their version ranges
|
|
816
|
+
const installedAugur = [];
|
|
817
|
+
for (const name of augurPackageNames) {
|
|
818
|
+
const version = allDeps[name];
|
|
819
|
+
if (version) {
|
|
820
|
+
installedAugur.push({ name, version });
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// 23. Version consistency -- all augur packages should be on the same version
|
|
825
|
+
if (installedAugur.length >= 2) {
|
|
826
|
+
const versions = new Set(installedAugur.map((p) => p.version));
|
|
827
|
+
if (versions.size === 1) {
|
|
828
|
+
pass(
|
|
829
|
+
"augur-version-sync",
|
|
830
|
+
"All augur packages on the same version",
|
|
831
|
+
installedAugur[0].version
|
|
832
|
+
);
|
|
833
|
+
} else {
|
|
834
|
+
const mismatchDetail = installedAugur
|
|
835
|
+
.map((p) => `${p.name.replace("@simpleapps-com/", "")}: ${p.version}`)
|
|
836
|
+
.join(", ");
|
|
837
|
+
fail(
|
|
838
|
+
"augur-version-sync",
|
|
839
|
+
"All augur packages must be on the same version",
|
|
840
|
+
mismatchDetail
|
|
841
|
+
);
|
|
842
|
+
}
|
|
843
|
+
} else if (installedAugur.length === 1) {
|
|
844
|
+
pass("augur-version-sync", "Single augur package installed", installedAugur[0].version);
|
|
845
|
+
} else {
|
|
846
|
+
skip("augur-version-sync", "Augur package version sync", "No augur packages found");
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// 24. Latest version -- augur packages should be on the latest published version
|
|
850
|
+
if (installedAugur.length > 0) {
|
|
851
|
+
// Use augur-config as the reference (all packages share the same version)
|
|
852
|
+
const refPkg = installedAugur[0];
|
|
853
|
+
const refVersion = refPkg.version.replace(/^[\^~>=<\s]+/, "");
|
|
854
|
+
|
|
855
|
+
try {
|
|
856
|
+
const { execSync } = await import("node:child_process");
|
|
857
|
+
const latestVersion = execSync(
|
|
858
|
+
`npm view @simpleapps-com/augur-config version 2>/dev/null`,
|
|
859
|
+
{ encoding: "utf-8" }
|
|
860
|
+
).trim();
|
|
861
|
+
|
|
862
|
+
if (latestVersion && refVersion === latestVersion) {
|
|
863
|
+
pass(
|
|
864
|
+
"augur-version-latest",
|
|
865
|
+
"Augur packages on latest version",
|
|
866
|
+
latestVersion
|
|
867
|
+
);
|
|
868
|
+
} else if (latestVersion) {
|
|
869
|
+
fail(
|
|
870
|
+
"augur-version-latest",
|
|
871
|
+
"Augur packages should be on the latest version",
|
|
872
|
+
`installed: ${refVersion}, latest: ${latestVersion} -- run: pnpm update ${augurPackageNames.map((n) => JSON.stringify(n)).join(" ")}`
|
|
873
|
+
);
|
|
874
|
+
} else {
|
|
875
|
+
skip(
|
|
876
|
+
"augur-version-latest",
|
|
877
|
+
"Augur latest version check",
|
|
878
|
+
"Could not fetch latest version from npm"
|
|
879
|
+
);
|
|
880
|
+
}
|
|
881
|
+
} catch {
|
|
882
|
+
skip(
|
|
883
|
+
"augur-version-latest",
|
|
884
|
+
"Augur latest version check",
|
|
885
|
+
"Could not fetch latest version from npm (offline or not published)"
|
|
886
|
+
);
|
|
887
|
+
}
|
|
888
|
+
} else {
|
|
889
|
+
skip("augur-version-latest", "Augur latest version check", "No augur packages found");
|
|
890
|
+
}
|
|
891
|
+
} else {
|
|
892
|
+
skip("augur-version-sync", "Augur package version sync", "No package.json");
|
|
893
|
+
skip("augur-version-latest", "Augur latest version check", "No package.json");
|
|
894
|
+
}
|
|
895
|
+
|
|
766
896
|
// ── Output ───────────────────────────────────────────────────────────────────
|
|
767
897
|
|
|
768
898
|
const ICONS = {
|
|
@@ -786,7 +916,7 @@ const groups = {
|
|
|
786
916
|
"site-hooks",
|
|
787
917
|
"ssr-options",
|
|
788
918
|
],
|
|
789
|
-
"Config Alignment": ["tsconfig", "eslint", "eslint-deprecated", "prettier", "tailwind", "icons"],
|
|
919
|
+
"Config Alignment": ["tsconfig", "eslint", "eslint-deprecated", "prettier", "knip", "tailwind", "icons"],
|
|
790
920
|
"Next.js Config": [
|
|
791
921
|
"next-external",
|
|
792
922
|
"next-ioredis",
|
|
@@ -796,6 +926,7 @@ const groups = {
|
|
|
796
926
|
],
|
|
797
927
|
"Testing & Quality": ["contract-tests", "quality-script", "pre-commit"],
|
|
798
928
|
"Proxy Adoption": ["proxy-local-hooks", "proxy-server-query", "api-version"],
|
|
929
|
+
"Package Versions": ["augur-version-sync", "augur-version-latest"],
|
|
799
930
|
"Patterns": ["no-wrapper", "auth", "image-loader"],
|
|
800
931
|
};
|
|
801
932
|
|