ripencli 0.3.4 → 1.0.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 (3) hide show
  1. package/README.md +5 -1
  2. package/dist/cli.js +25 -8
  3. package/package.json +7 -4
package/README.md CHANGED
@@ -15,6 +15,7 @@
15
15
  - **Changelog viewer** — see GitHub release notes before you update
16
16
  - **npm, pnpm, yarn & bun** — auto-detects your package manager
17
17
  - **Global packages** — check and update global installs across all* package managers
18
+ - **Show all packages** — `ripen --all` lists every dependency, not just outdated ones (great for checking changelogs or downgrading)
18
19
  - **Self-update** — notifies you when a new version of ripen is available
19
20
  - **Major bump warnings** — highlights potentially breaking updates
20
21
  - **Scope grouping** — optionally group scoped packages (e.g. `@heroui/*`) together
@@ -41,6 +42,9 @@ ripen
41
42
  # Check global packages (scans npm, pnpm, and yarn)
42
43
  ripen -g
43
44
 
45
+ # Show all packages, not just outdated ones
46
+ ripen --all
47
+
44
48
  # Help
45
49
  ripen --help
46
50
  ```
@@ -61,7 +65,7 @@ ripen --help
61
65
 
62
66
  1. Reads your `package.json` and checks each dependency against the npm registry directly
63
67
  2. Detects your package manager from the lock file (`bun.lock`, `pnpm-lock.yaml`, `package-lock.json`, or `yarn.lock`) for running updates
64
- 3. Shows outdated packages in a colorful interactive list
68
+ 3. Shows outdated packages in a colorful interactive list (use `--all` to show every package, including up-to-date ones)
65
69
  4. Press `v` on any package to pick a specific version from the npm registry
66
70
  5. Press `c` to see GitHub release notes between your current and target version
67
71
  6. Select the ones you want and press enter — ripen runs the update commands for you
package/dist/cli.js CHANGED
@@ -239,7 +239,7 @@ async function fetchAllLatest(names, concurrency, onLine) {
239
239
  await Promise.all(Array.from({ length: Math.min(concurrency, names.length) }, () => worker()));
240
240
  return results;
241
241
  }
242
- async function getOutdatedPackages(manager, cwd, global = false, onLine) {
242
+ async function getOutdatedPackages(manager, cwd, global = false, onLine, showAll = false) {
243
243
  if (global) return getGlobalOutdatedPackages(manager, cwd, onLine);
244
244
  let deps;
245
245
  try {
@@ -263,7 +263,7 @@ async function getOutdatedPackages(manager, cwd, global = false, onLine) {
263
263
  for (const dep of deps) {
264
264
  const latest = latestVersions.get(dep.name);
265
265
  if (!latest) continue;
266
- if (!isNewerVersion(dep.current, latest)) continue;
266
+ if (!showAll && !isNewerVersion(dep.current, latest)) continue;
267
267
  packages.push({
268
268
  name: dep.name,
269
269
  current: dep.current,
@@ -853,7 +853,7 @@ function computeMaxPerGroup(terminalRows, groupCount) {
853
853
  }
854
854
  //#endregion
855
855
  //#region src/ui/package-list/PackageList.tsx
856
- function PackageList({ packages, onToggle, onToggleMany, onSelectVersion, onViewChangelog, onConfirm, onOpenSettings, groupByScope = false, groupScopes, groupsOnTop = false, frequencySort = false, frequency = {}, separateDevDeps = true, isActive = true }) {
856
+ function PackageList({ packages, onToggle, onToggleMany, onSelectVersion, onViewChangelog, onConfirm, onOpenSettings, groupByScope = false, groupScopes, groupsOnTop = false, frequencySort = false, frequency = {}, separateDevDeps = true, showAll = false, isActive = true }) {
857
857
  const [focusedIndex, setFocusedIndex] = useState(0);
858
858
  const allRows = useMemo(() => buildDisplayRows(packages, groupByScope, groupScopes, groupsOnTop, frequencySort, frequency, separateDevDeps), [
859
859
  packages,
@@ -949,6 +949,7 @@ function PackageList({ packages, onToggle, onToggleMany, onSelectVersion, onView
949
949
  if (key.return) onConfirm();
950
950
  }, { isActive });
951
951
  const selectedCount = packages.filter((p) => p.selected).length;
952
+ const outdatedCount = packages.filter((p) => p.current !== p.latest).length;
952
953
  return /* @__PURE__ */ jsxs(Box, {
953
954
  flexDirection: "column",
954
955
  children: [
@@ -1044,7 +1045,18 @@ function PackageList({ packages, onToggle, onToggleMany, onSelectVersion, onView
1044
1045
  children: " selected"
1045
1046
  }),
1046
1047
  " ",
1047
- /* @__PURE__ */ jsxs(Text, {
1048
+ showAll ? /* @__PURE__ */ jsxs(Text, {
1049
+ color: "gray",
1050
+ children: [
1051
+ packages.length,
1052
+ " packages",
1053
+ " ",
1054
+ /* @__PURE__ */ jsxs(Text, {
1055
+ color: outdatedCount > 0 ? "yellow" : "green",
1056
+ children: [outdatedCount, " outdated"]
1057
+ })
1058
+ ]
1059
+ }) : /* @__PURE__ */ jsxs(Text, {
1048
1060
  color: "gray",
1049
1061
  children: [packages.length, " outdated"]
1050
1062
  })
@@ -1186,7 +1198,8 @@ function PackageGroupBox({ group, focusedIndex, collapsedScopes, scrollOffset, m
1186
1198
  }
1187
1199
  if (row.kind !== "package") return null;
1188
1200
  const pkg = row.pkg;
1189
- const isMajorBump = parseInt(pkg.latest) > parseInt(pkg.current);
1201
+ const isUpToDate = pkg.current === pkg.latest;
1202
+ const isMajorBump = !isUpToDate && parseInt(pkg.latest) > parseInt(pkg.current);
1190
1203
  return /* @__PURE__ */ jsxs(Box, {
1191
1204
  gap: 2,
1192
1205
  children: [
@@ -1213,7 +1226,7 @@ function PackageGroupBox({ group, focusedIndex, collapsedScopes, scrollOffset, m
1213
1226
  /* @__PURE__ */ jsx(Box, {
1214
1227
  width: 14,
1215
1228
  children: /* @__PURE__ */ jsx(Text, {
1216
- color: "red",
1229
+ color: isUpToDate ? "green" : "red",
1217
1230
  children: pkg.current
1218
1231
  })
1219
1232
  }),
@@ -2339,7 +2352,7 @@ function useExitOnScreen(screen, targetScreens, exit, options) {
2339
2352
  }
2340
2353
  //#endregion
2341
2354
  //#region src/ui/App.tsx
2342
- function App({ project, global, version, installManager }) {
2355
+ function App({ project, global, showAll, version, installManager }) {
2343
2356
  const { exit } = useApp();
2344
2357
  const [screen, setScreen] = useState("self-update-check");
2345
2358
  const [config, setConfig] = useState(() => loadConfig());
@@ -2372,7 +2385,7 @@ function App({ project, global, version, installManager }) {
2372
2385
  setFetchStarted(true);
2373
2386
  terminal.setLoadingMsg("Checking for outdated packages…");
2374
2387
  terminal.setTerminalCmd(global ? "Checking all package managers…" : "Checking npm registry…");
2375
- (global ? getAllGlobalOutdated(project.cwd, terminal.onLine) : getOutdatedPackages(project.manager, project.cwd, false, terminal.onLine)).then((result) => {
2388
+ (global ? getAllGlobalOutdated(project.cwd, terminal.onLine) : getOutdatedPackages(project.manager, project.cwd, false, terminal.onLine, showAll)).then((result) => {
2376
2389
  if (!result.ok) {
2377
2390
  setErrorMsg(result.error);
2378
2391
  setScreen("error");
@@ -2570,6 +2583,7 @@ function App({ project, global, version, installManager }) {
2570
2583
  frequencySort: config.frequencySort,
2571
2584
  frequency,
2572
2585
  separateDevDeps: config.separateDevDeps,
2586
+ showAll,
2573
2587
  isActive: isListActive
2574
2588
  })
2575
2589
  })
@@ -2580,6 +2594,7 @@ function App({ project, global, version, installManager }) {
2580
2594
  const { version: VERSION } = createRequire(import.meta.url)("../package.json");
2581
2595
  const args = process.argv.slice(2);
2582
2596
  const isGlobal = args.includes("--global") || args.includes("-g");
2597
+ const showAll = args.includes("--all") || args.includes("-a");
2583
2598
  const showHelp = args.includes("--help") || args.includes("-h");
2584
2599
  if (args.includes("--version") || args.includes("-V")) {
2585
2600
  console.log(VERSION);
@@ -2592,6 +2607,7 @@ if (showHelp) {
2592
2607
  Usage:
2593
2608
  ripen check current project
2594
2609
  ripen -g check global packages
2610
+ ripen -a show all packages, not just outdated ones
2595
2611
  ripen --help show this help
2596
2612
  ripen --version show version
2597
2613
 
@@ -2614,6 +2630,7 @@ if (!isGlobal && !hasPackageJson(cwd)) {
2614
2630
  const { waitUntilExit } = render(/* @__PURE__ */ jsx(App, {
2615
2631
  project: getProjectInfo(cwd),
2616
2632
  global: isGlobal,
2633
+ showAll,
2617
2634
  version: VERSION,
2618
2635
  installManager: detectGlobalInstallManager()
2619
2636
  }), { exitOnCtrlC: false });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ripencli",
3
- "version": "0.3.4",
3
+ "version": "1.0.0",
4
4
  "description": "Interactive dependency updater for npm, pnpm, yarn, and bun",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -35,7 +35,10 @@
35
35
  "dev": "tsx src/cli.tsx",
36
36
  "typecheck": "tsc --noEmit",
37
37
  "start": "node dist/cli.js",
38
- "checks": "node scripts/pr-checks.ts"
38
+ "checks": "node scripts/pr-checks.ts",
39
+ "docs:dev": "pnpm --prefix docs dev",
40
+ "docs:build": "pnpm --prefix docs build",
41
+ "docs:start": "pnpm --prefix docs start"
39
42
  },
40
43
  "keywords": [
41
44
  "npm",
@@ -71,7 +74,7 @@
71
74
  "@types/node": "^25.5.0",
72
75
  "@types/react": "^19.2.14",
73
76
  "prettier": "^3.8.1",
74
- "tsdown": "^0.21.4",
75
- "typescript": "^5.9.3"
77
+ "tsdown": "^0.21.6",
78
+ "typescript": "^6.0.2"
76
79
  }
77
80
  }