pruny 1.30.0 → 1.32.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.
Files changed (2) hide show
  1. package/dist/index.js +33 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -16196,6 +16196,7 @@ program2.command("init").description("Create a default pruny.config.json file").
16196
16196
  });
16197
16197
  program2.action(async (options) => {
16198
16198
  const startTime = Date.now();
16199
+ const isNonInteractive = !process.stdin.isTTY || !!process.env.CI;
16199
16200
  try {
16200
16201
  const baseConfig = loadConfig({
16201
16202
  dir: options.dir,
@@ -16256,7 +16257,7 @@ program2.action(async (options) => {
16256
16257
  appsToScan.push(...availableApps.filter((app) => !ignoredApps.includes(app)));
16257
16258
  } else if (options.folder) {
16258
16259
  appsToScan.push(...availableApps);
16259
- } else if (!options.ignoreApps && !options.filter && !options.json) {
16260
+ } else if (!isNonInteractive && !options.ignoreApps && !options.filter && !options.json) {
16260
16261
  const response = await import_prompts.default({
16261
16262
  type: "select",
16262
16263
  name: "selected",
@@ -16349,6 +16350,10 @@ program2.action(async (options) => {
16349
16350
  if (issues > 0) {
16350
16351
  process.exit(1);
16351
16352
  }
16353
+ } else if (isNonInteractive) {
16354
+ if (hasUnusedItems(result)) {
16355
+ printDetailedReport(result);
16356
+ }
16352
16357
  } else if (hasUnusedItems(result)) {
16353
16358
  if (options.verbose) {
16354
16359
  printDetailedReport(result);
@@ -16384,7 +16389,7 @@ program2.action(async (options) => {
16384
16389
  }
16385
16390
  }
16386
16391
  }
16387
- if (!isMonorepo || !requestedBack && appsToScan.length > 0 || options.json || options.filter || options.all) {
16392
+ if (!isMonorepo || !requestedBack && appsToScan.length > 0 || options.json || options.filter || options.all || isNonInteractive) {
16388
16393
  break;
16389
16394
  }
16390
16395
  }
@@ -16475,6 +16480,17 @@ function printDetailedReport(result) {
16475
16480
  }
16476
16481
  console.log("");
16477
16482
  }
16483
+ if (result.missingAssets && result.missingAssets.total > 0) {
16484
+ console.log(source_default.yellow.bold(`⚠️ Missing Assets (Broken Links):
16485
+ `));
16486
+ for (const asset of result.missingAssets.assets) {
16487
+ console.log(source_default.red(` ${asset.path}`));
16488
+ for (const ref of asset.references) {
16489
+ console.log(source_default.dim(` → Referenced in: ${ref}`));
16490
+ }
16491
+ }
16492
+ console.log("");
16493
+ }
16478
16494
  if (result.unusedServices && result.unusedServices.methods.length > 0) {
16479
16495
  console.log(source_default.red.bold(`\uD83D\uDEE0️ Unused Service Methods:
16480
16496
  `));
@@ -16496,10 +16512,11 @@ function countIssues(result) {
16496
16512
  const unusedRoutes = result.routes.filter((r) => !r.used).length;
16497
16513
  const partialRoutes = result.routes.filter((r) => r.used && r.unusedMethods.length > 0).length;
16498
16514
  const unusedAssets = result.publicAssets ? result.publicAssets.unused : 0;
16515
+ const missingAssets = result.missingAssets ? result.missingAssets.total : 0;
16499
16516
  const unusedFiles = result.unusedFiles ? result.unusedFiles.unused : 0;
16500
16517
  const unusedExports = result.unusedExports ? result.unusedExports.unused : 0;
16501
16518
  const unusedServices = result.unusedServices ? result.unusedServices.total : 0;
16502
- return unusedRoutes + partialRoutes + unusedAssets + unusedFiles + unusedExports + unusedServices;
16519
+ return unusedRoutes + partialRoutes + unusedAssets + missingAssets + unusedFiles + unusedExports + unusedServices;
16503
16520
  }
16504
16521
  async function handleFixes(result, config, options, showBack) {
16505
16522
  const gitRoot = findGitRoot(config.dir);
@@ -17102,6 +17119,19 @@ function printSummaryTable(result, context) {
17102
17119
  }
17103
17120
  }
17104
17121
  printTable(summary);
17122
+ if (result.missingAssets && result.missingAssets.total > 0) {
17123
+ console.log(source_default.yellow.bold(`
17124
+ ⚠ Missing Assets (Broken Links):
17125
+ `));
17126
+ for (const asset of result.missingAssets.assets) {
17127
+ console.log(source_default.red(` ✗ ${asset.path}`));
17128
+ for (const ref of asset.references) {
17129
+ console.log(source_default.dim(` → Referenced in: ${ref}`));
17130
+ }
17131
+ }
17132
+ console.log(source_default.yellow(`
17133
+ These files are referenced in code but don't exist. Update the links or create the files.`));
17134
+ }
17105
17135
  }
17106
17136
  function printConsolidatedTable(allResults) {
17107
17137
  console.log(source_default.bold(`\uD83D\uDCCA Monorepo Summary
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pruny",
3
- "version": "1.30.0",
3
+ "version": "1.32.0",
4
4
  "description": "Find and remove unused Next.js API routes & Nest.js Controllers",
5
5
  "type": "module",
6
6
  "files": [