@crbroughton/recul 0.4.1 → 0.6.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/README.md CHANGED
@@ -88,23 +88,34 @@ Commit a `recul.config.jsonc` to standardise settings across the team.
88
88
 
89
89
  A config file is required; run `recul init` if you do not have one.
90
90
 
91
+ ## CLI flags
92
+
93
+ | Flag | Description |
94
+ |------|-------------|
95
+ | `-f, --file` | Path to `package.json` (default: `package.json`) |
96
+ | `--fix` | Apply catalog fixes directly to `pnpm-workspace.yaml` |
97
+ | `--behindBehavior=<value>` | Override `behindBehavior` from config (`ignore` or `report`) |
98
+
91
99
  ## Output
92
100
 
93
101
  ```
94
102
  recul staying 2 versions behind latest
95
103
 
96
104
  settings
97
- lag 2 ; stay 2 versions behind latest
98
- pm pnpm ; the chosen package manager
99
- behind ignore ; ignore packages behind target
100
- range exact ; pin exact versions
101
- minAge 3 ; skip versions published within the last 3 days
102
-
103
- package declared → target latest status
104
- ────────────────────────────────────────────────────────────────────────────────
105
- express ^4.19.2 4.17.3 4.19.2 ↓ will pin back
106
- react ^18.3.1 18.1.0 18.3.1 ↓ will pin back
107
- typescript 5.4.5 5.4.5 5.4.5 ✓ ok
105
+ setting value description
106
+ ──────────────────────────────────────────────────────────────────
107
+ lag 2 stay 2 versions behind latest
108
+ pm pnpm the chosen package manager
109
+ behind ignore ignore packages behind target
110
+ range exact pin exact versions
111
+ minAge 3 skip versions published within the last 3 days
112
+ sameMajor true restrict candidates to current major
113
+
114
+ package declared → target installed latest gap status
115
+ ────────────────────────────────────────────────────────────────
116
+ express ^4.19.2 4.17.3 4.17.3 4.19.2 2 ↓ will pin back
117
+ react ^18.3.1 18.1.0 18.0.0 18.3.1 2 ↓ will pin back
118
+ typescript 5.4.5 5.4.5 5.4.5 5.4.5 0 ✓ ok
108
119
 
109
120
  to pin back:
110
121
  pnpm add express@4.17.3 react@18.1.0
@@ -121,6 +132,24 @@ to pin back:
121
132
 
122
133
  A `⚠ declared <specifier>` warning is appended when a package is declared with a different range prefix than `rangeSpecifier`; this means the audited version may differ from what is actually installed.
123
134
 
135
+ ## pnpm monorepo support
136
+
137
+ In a pnpm workspace, recul detects `pnpm-workspace.yaml` and audits each package separately, grouping output by package:
138
+
139
+ ```
140
+ ─── packages/app ────────────────────────────────────────────────
141
+ package declared → target installed latest gap status
142
+ ─────────────────────────────────────────────────────────────────
143
+ express 5.2.1 5.0.0 5.2.1 5.2.1 0 ↓ will pin back
144
+
145
+ ─── packages/lib ────────────────────────────────────────────────
146
+ package declared → target installed latest gap status
147
+ ─────────────────────────────────────────────────────────────────
148
+ lodash 4.18.1 4.17.23 4.18.1 4.18.1 0 ↓ will pin back
149
+ ```
150
+
151
+ Column widths are computed once across all packages so the table stays aligned. Catalog violations from all packages are collected and shown together at the end. Pass `--fix` to apply all catalog updates in one go.
152
+
124
153
  ## pnpm catalog support
125
154
 
126
155
  When using pnpm workspaces with a `catalogs` block in `pnpm-workspace.yaml`, recul reads catalog entries to resolve `catalog:` and `catalog:<name>` references in `package.json`.
@@ -154,6 +183,11 @@ Add recul to your CI pipeline to fail the workflow when dependencies are ahead o
154
183
  |-------|---------|-------------|
155
184
  | `working-directory` | `.` | Directory containing `recul.config.jsonc` and `package.json` |
156
185
  | `fail-on-violations` | `true` | Set to `false` for informational runs that never fail |
186
+ | `behind-behavior` | `` | Override `behindBehavior` from config (`ignore` or `report`) |
187
+
188
+ ### Job summary
189
+
190
+ recul writes a markdown table to the GitHub Actions job summary automatically. In monorepo mode each workspace package gets its own section. No configuration required.
157
191
 
158
192
  ### Exit codes
159
193
 
package/dist/bin/recul.js CHANGED
@@ -7,8 +7,8 @@ import { destr } from 'destr';
7
7
  import { auditDeps, buildCatalogUpdates } from '../src/audit.js';
8
8
  import { DEFAULTS, loadConfigFile, resolveConfigDir } from '../src/config.js';
9
9
  import { runInit } from '../src/init.js';
10
- import { detectPackageManager, loadLockfile, loadPnpmCatalog, npmAdapter, pnpmAdapter, resolveCatalogRefs, updatePnpmCatalog } from '../src/lockfile.js';
11
- import { printResults } from '../src/output.js';
10
+ import { detectPackageManager, findWorkspaceRoot, loadLockfile, loadPnpmCatalog, npmAdapter, parsePnpmLock, pnpmAdapter, resolveCatalogRefs, resolveWorkspacePackages, updatePnpmCatalog } from '../src/lockfile.js';
11
+ import { printMonorepoResults, printResults, writeSummary } from '../src/output.js';
12
12
  const initCommand = defineCommand({
13
13
  meta: { name: 'init', description: 'Create recul.config.jsonc with recommended settings' },
14
14
  run() {
@@ -20,6 +20,7 @@ const main = defineCommand({
20
20
  args: {
21
21
  file: { type: 'string', alias: 'f', description: 'Path to package.json (default: package.json)' },
22
22
  fix: { type: 'boolean', description: 'Apply catalog fixes directly to pnpm-workspace.yaml' },
23
+ behindBehavior: { type: 'string', description: 'Override behindBehavior from config (ignore | report)' },
23
24
  },
24
25
  subCommands: { init: initCommand },
25
26
  async run({ args }) {
@@ -31,7 +32,7 @@ const main = defineCommand({
31
32
  process.exit(1);
32
33
  }
33
34
  const detectedPm = detectPackageManager(configDir);
34
- const config = defu({ file: args.file }, { lag: fileConfig.lag, file: fileConfig.packageFile, pm: fileConfig.packageManager, behindBehavior: fileConfig.behindBehavior, rangeSpecifier: fileConfig.rangeSpecifier, ignore: fileConfig.ignore, minimumReleaseAge: fileConfig.minimumReleaseAge, preReleaseFilter: fileConfig.preReleaseFilter, sameMajor: fileConfig.sameMajor }, { pm: detectedPm ?? undefined }, DEFAULTS);
35
+ const config = defu({ file: args.file, behindBehavior: args.behindBehavior }, { lag: fileConfig.lag, file: fileConfig.packageFile, pm: fileConfig.packageManager, behindBehavior: fileConfig.behindBehavior, rangeSpecifier: fileConfig.rangeSpecifier, ignore: fileConfig.ignore, minimumReleaseAge: fileConfig.minimumReleaseAge, preReleaseFilter: fileConfig.preReleaseFilter, sameMajor: fileConfig.sameMajor }, { pm: detectedPm ?? undefined }, DEFAULTS);
35
36
  const { lag, file, pm, behindBehavior, rangeSpecifier, ignore, preReleaseFilter, sameMajor } = config;
36
37
  const minimumReleaseAge = config.minimumReleaseAge !== null ? config.minimumReleaseAge : undefined;
37
38
  const pkgPath = resolve(process.cwd(), file);
@@ -49,17 +50,82 @@ const main = defineCommand({
49
50
  process.exit(1);
50
51
  }
51
52
  const pkgDir = dirname(pkgPath);
53
+ // Detect monorepo: workspace root has a packages: field with entries beyond '.'
54
+ const workspaceRoot = findWorkspaceRoot(pkgDir);
55
+ const workspacePackages = workspaceRoot !== null ? resolveWorkspacePackages(workspaceRoot) : [];
56
+ const isMonorepo = workspacePackages.length > 0;
57
+ // Shared catalog + lockfile (always loaded from workspace root when available)
58
+ const catalogDir = workspaceRoot ?? pkgDir;
59
+ const catalogs = loadPnpmCatalog(catalogDir);
60
+ const catalogPackages = catalogs !== null
61
+ ? new Set(Object.values(catalogs).flatMap(Object.keys))
62
+ : undefined;
63
+ // Read lockfile content once from root for monorepo importer lookups
64
+ const lockfilePath = workspaceRoot !== null
65
+ ? `${workspaceRoot}/pnpm-lock.yaml`
66
+ : null;
67
+ const lockfileContent = lockfilePath !== null && (await import('node:fs')).existsSync(lockfilePath)
68
+ ? (await import('node:fs')).readFileSync(lockfilePath, 'utf8')
69
+ : null;
70
+ if (isMonorepo && workspaceRoot !== null) {
71
+ const packageResults = await Promise.all(workspacePackages.map(async (wp) => {
72
+ let wpRaw;
73
+ try {
74
+ wpRaw = destr((await import('node:fs')).readFileSync(`${wp.dir}/package.json`, 'utf8'));
75
+ }
76
+ catch {
77
+ return { pkg: wp, results: [] };
78
+ }
79
+ if (wpRaw === null || typeof wpRaw !== 'object')
80
+ return { pkg: wp, results: [] };
81
+ const relPath = wp.dir === workspaceRoot ? '.' : wp.dir.replace(`${workspaceRoot}/`, '');
82
+ const installedMap = lockfileContent !== null
83
+ ? parsePnpmLock(lockfileContent, relPath)
84
+ : null;
85
+ const wpJson = catalogs !== null
86
+ ? {
87
+ ...(wpRaw.dependencies !== undefined ? { dependencies: resolveCatalogRefs(wpRaw.dependencies, catalogs) } : {}),
88
+ ...(wpRaw.devDependencies !== undefined ? { devDependencies: resolveCatalogRefs(wpRaw.devDependencies, catalogs) } : {}),
89
+ }
90
+ : wpRaw;
91
+ const results = await auditDeps({
92
+ pkgJson: wpJson,
93
+ lag,
94
+ ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}),
95
+ preReleaseFilter,
96
+ sameMajor,
97
+ rangeSpecifier,
98
+ ignore,
99
+ ...(installedMap !== null ? { installed: installedMap } : {}),
100
+ ...(catalogPackages !== undefined ? { catalogPackages } : {}),
101
+ });
102
+ return { pkg: wp, results };
103
+ }));
104
+ if (args.fix && catalogPackages !== undefined) {
105
+ const allResults = packageResults.flatMap(p => p.results);
106
+ const updates = buildCatalogUpdates(allResults, behindBehavior);
107
+ if (Object.keys(updates).length > 0)
108
+ updatePnpmCatalog(workspaceRoot, updates);
109
+ }
110
+ printMonorepoResults({ packages: packageResults, lag, pm, behindBehavior, rangeSpecifier, sameMajor, ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}), ...(catalogPackages !== undefined ? { workspaceFile: 'pnpm-workspace.yaml' } : {}) });
111
+ const summaryPath = process.env.GITHUB_STEP_SUMMARY;
112
+ if (summaryPath !== undefined)
113
+ writeSummary({ packages: packageResults, lag, behindBehavior, summaryPath });
114
+ const hasViolations = packageResults.flatMap(p => p.results).some(r => r.status === 'pin'
115
+ || r.status === 'unresolved'
116
+ || (r.status === 'behind' && behindBehavior === 'report'));
117
+ if (hasViolations)
118
+ process.exit(1);
119
+ return;
120
+ }
121
+ // Single-package mode
52
122
  const base = raw;
53
- const catalogs = loadPnpmCatalog(pkgDir);
54
123
  const pkgJson = catalogs !== null
55
124
  ? {
56
125
  ...(base.dependencies !== undefined ? { dependencies: resolveCatalogRefs(base.dependencies, catalogs) } : {}),
57
126
  ...(base.devDependencies !== undefined ? { devDependencies: resolveCatalogRefs(base.devDependencies, catalogs) } : {}),
58
127
  }
59
128
  : base;
60
- const catalogPackages = catalogs !== null
61
- ? new Set(Object.values(catalogs).flatMap(Object.keys))
62
- : undefined;
63
129
  const installedMap = loadLockfile({ dir: pkgDir, adapters: [npmAdapter, pnpmAdapter] });
64
130
  const results = await auditDeps({
65
131
  pkgJson,
@@ -81,6 +147,9 @@ const main = defineCommand({
81
147
  }
82
148
  }
83
149
  printResults({ results, lag, pm, behindBehavior, rangeSpecifier, sameMajor, ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}), ...(catalogPackages !== undefined ? { workspaceFile: 'pnpm-workspace.yaml' } : {}), ...(fixed !== undefined ? { fixed } : {}) });
150
+ const summaryPath = process.env.GITHUB_STEP_SUMMARY;
151
+ if (summaryPath !== undefined)
152
+ writeSummary({ results, lag, behindBehavior, summaryPath });
84
153
  const hasViolations = results.some(r => r.status === 'pin'
85
154
  || r.status === 'unresolved'
86
155
  || (r.status === 'behind' && behindBehavior === 'report'));
@@ -1 +1 @@
1
- {"version":3,"file":"recul.js","sourceRoot":"","sources":["../../bin/recul.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recul.js","sourceRoot":"","sources":["../../bin/recul.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { LockfileAdapter } from '../lockfile.js';
2
- import type { InstalledVersionMap } from '../types.js';
2
+ import type { InstalledVersionMap, WorkspacePackage } from '../types.js';
3
3
  /**
4
4
  * Parse a pnpm-lock.yaml (v6–v9) into an installed version map.
5
5
  *
@@ -7,7 +7,7 @@ import type { InstalledVersionMap } from '../types.js';
7
7
  * Peer-dependency suffixes like `1.2.3(@types/node@22.0.0)` are stripped
8
8
  * to leave only the bare version number.
9
9
  */
10
- export declare function parsePnpmLock(content: string): InstalledVersionMap;
10
+ export declare function parsePnpmLock(content: string, importer?: string): InstalledVersionMap;
11
11
  export declare const pnpmAdapter: LockfileAdapter;
12
12
  /**
13
13
  * Read all catalogs from pnpm-workspace.yaml and return a
@@ -30,5 +30,17 @@ export declare function resolveCatalogRefs(deps: Record<string, string>, catalog
30
30
  * `updates` is a map of package name → new specifier (e.g. `"1.2.3"`).
31
31
  * Only lines within the file that match a catalog entry for the given name are rewritten.
32
32
  */
33
+ /**
34
+ * Walk up from startDir until a pnpm-workspace.yaml with a `packages:` field is found.
35
+ * Returns the directory containing it, or null if not found.
36
+ */
37
+ export declare function findWorkspaceRoot(startDir: string): string | null;
38
+ /**
39
+ * Expand the `packages:` globs from pnpm-workspace.yaml into a list of workspace packages.
40
+ * Supports literal paths and single-level wildcards (e.g. `packages/*`).
41
+ * Skips `.` (the root itself) and exclusion patterns starting with `!`.
42
+ * Only returns directories that contain a `package.json`.
43
+ */
44
+ export declare function resolveWorkspacePackages(root: string): WorkspacePackage[];
33
45
  export declare function updatePnpmCatalog(dir: string, updates: Record<string, string>): void;
34
46
  //# sourceMappingURL=pnpm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pnpm.d.ts","sourceRoot":"","sources":["../../../src/adapters/pnpm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAmBtD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAkBlE;AAED,eAAO,MAAM,WAAW,EAAE,eAGzB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAmB1F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASpF"}
1
+ {"version":3,"file":"pnpm.d.ts","sourceRoot":"","sources":["../../../src/adapters/pnpm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAoBxE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,mBAAmB,CAkBlF;AAED,eAAO,MAAM,WAAW,EAAE,eAGzB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAmB1F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;;;GAIG;AACH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBjE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAyEzE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASpF"}
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
1
+ import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import { parseYAML } from 'confbox';
4
4
  const REGEX_ESCAPE = /[.*+?^${}()|[\]\\]/g;
@@ -9,10 +9,10 @@ const REGEX_ESCAPE = /[.*+?^${}()|[\]\\]/g;
9
9
  * Peer-dependency suffixes like `1.2.3(@types/node@22.0.0)` are stripped
10
10
  * to leave only the bare version number.
11
11
  */
12
- export function parsePnpmLock(content) {
12
+ export function parsePnpmLock(content, importer = '.') {
13
13
  const raw = parseYAML(content);
14
14
  const result = {};
15
- const root = raw?.importers?.['.'];
15
+ const root = raw?.importers?.[importer];
16
16
  if (!root)
17
17
  return result;
18
18
  for (const block of [root.dependencies, root.devDependencies]) {
@@ -85,6 +85,106 @@ export function resolveCatalogRefs(deps, catalogs) {
85
85
  * `updates` is a map of package name → new specifier (e.g. `"1.2.3"`).
86
86
  * Only lines within the file that match a catalog entry for the given name are rewritten.
87
87
  */
88
+ /**
89
+ * Walk up from startDir until a pnpm-workspace.yaml with a `packages:` field is found.
90
+ * Returns the directory containing it, or null if not found.
91
+ */
92
+ export function findWorkspaceRoot(startDir) {
93
+ let dir = startDir;
94
+ while (true) {
95
+ const candidate = resolve(dir, 'pnpm-workspace.yaml');
96
+ if (existsSync(candidate)) {
97
+ try {
98
+ const raw = parseYAML(readFileSync(candidate, 'utf8'));
99
+ if (raw?.packages !== undefined)
100
+ return dir;
101
+ }
102
+ catch (err) {
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ console.error(`error: could not parse ${candidate}: ${message}`);
105
+ }
106
+ }
107
+ const parent = resolve(dir, '..');
108
+ if (parent === dir)
109
+ return null;
110
+ dir = parent;
111
+ }
112
+ }
113
+ /**
114
+ * Expand the `packages:` globs from pnpm-workspace.yaml into a list of workspace packages.
115
+ * Supports literal paths and single-level wildcards (e.g. `packages/*`).
116
+ * Skips `.` (the root itself) and exclusion patterns starting with `!`.
117
+ * Only returns directories that contain a `package.json`.
118
+ */
119
+ export function resolveWorkspacePackages(root) {
120
+ const workspacePath = resolve(root, 'pnpm-workspace.yaml');
121
+ let raw = null;
122
+ try {
123
+ raw = parseYAML(readFileSync(workspacePath, 'utf8'));
124
+ }
125
+ catch {
126
+ return [];
127
+ }
128
+ const patterns = raw?.packages ?? [];
129
+ const result = [];
130
+ for (const pattern of patterns) {
131
+ if (pattern.startsWith('!'))
132
+ continue;
133
+ if (pattern === '.') {
134
+ const pkgJsonPath = resolve(root, 'package.json');
135
+ if (!existsSync(pkgJsonPath))
136
+ continue;
137
+ try {
138
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
139
+ result.push({ name: pkgJson.name ?? '.', dir: root });
140
+ }
141
+ catch (err) {
142
+ const message = err instanceof Error ? err.message : String(err);
143
+ console.error(`error: could not parse ${pkgJsonPath}: ${message}`);
144
+ }
145
+ continue;
146
+ }
147
+ if (pattern.includes('*')) {
148
+ const prefix = pattern.split('/*')[0];
149
+ if (prefix === undefined)
150
+ continue;
151
+ const parentDir = resolve(root, prefix);
152
+ if (!existsSync(parentDir))
153
+ continue;
154
+ for (const entry of readdirSync(parentDir, { withFileTypes: true })) {
155
+ if (!entry.isDirectory())
156
+ continue;
157
+ const pkgDir = resolve(parentDir, entry.name);
158
+ const pkgJsonPath = resolve(pkgDir, 'package.json');
159
+ if (!existsSync(pkgJsonPath))
160
+ continue;
161
+ try {
162
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
163
+ result.push({ name: pkgJson.name ?? entry.name, dir: pkgDir });
164
+ }
165
+ catch (err) {
166
+ const message = err instanceof Error ? err.message : String(err);
167
+ console.error(`error: could not parse ${pkgJsonPath}: ${message}`);
168
+ }
169
+ }
170
+ }
171
+ else {
172
+ const pkgDir = resolve(root, pattern);
173
+ const pkgJsonPath = resolve(pkgDir, 'package.json');
174
+ if (!existsSync(pkgJsonPath))
175
+ continue;
176
+ try {
177
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
178
+ result.push({ name: pkgJson.name ?? pattern, dir: pkgDir });
179
+ }
180
+ catch (err) {
181
+ const message = err instanceof Error ? err.message : String(err);
182
+ console.error(`error: could not parse ${pkgJsonPath}: ${message}`);
183
+ }
184
+ }
185
+ }
186
+ return result;
187
+ }
88
188
  export function updatePnpmCatalog(dir, updates) {
89
189
  const path = resolve(dir, 'pnpm-workspace.yaml');
90
190
  let content = readFileSync(path, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"pnpm.js","sourceRoot":"","sources":["../../../src/adapters/pnpm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pnpm.js","sourceRoot":"","sources":["../../../src/adapters/pnpm.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAkB,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AA0DnK,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,cAAc,EAAE,oBAAoB,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,gBAAqB,EAAE,SAAgB,EAAE,cAAc,EAAE,MAAW,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA2B/M;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAclH"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAkB,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AA6DnK,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,cAAc,EAAE,oBAAoB,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,gBAAqB,EAAE,SAAgB,EAAE,cAAc,EAAE,MAAW,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA2B/M;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAclH"}
package/dist/src/audit.js CHANGED
@@ -6,7 +6,7 @@ async function auditOne({ name, rawVersion, lag, minimumReleaseAge, preReleaseFi
6
6
  const isCatalogRef = rawVersion.startsWith('catalog:');
7
7
  // catalog: entries have no usable version in package.json — the lockfile is required
8
8
  if (isCatalogRef && installedVersion === null) {
9
- return { name, declared, current: '', installed: null, target: null, latest: null, status: 'unresolved', rangeSpecifier, declaredSpecifier: 'other', specifierMismatch: false, fromCatalog, error: 'catalog reference; pnpm lockfile required' };
9
+ return { name, declared, current: '', installed: null, target: null, latest: null, status: 'unresolved', rangeSpecifier, declaredSpecifier: 'other', specifierMismatch: false, fromCatalog, versionsFromLatest: null, error: 'catalog reference; pnpm lockfile required' };
10
10
  }
11
11
  const current = isCatalogRef ? installedVersion : bareVersion(rawVersion);
12
12
  const installed = installedVersion;
@@ -18,11 +18,11 @@ async function auditOne({ name, rawVersion, lag, minimumReleaseAge, preReleaseFi
18
18
  }
19
19
  catch (err) {
20
20
  const message = err instanceof Error ? err.message : String(err);
21
- return { name, declared, current, installed, target: null, latest: null, status: 'unresolved', rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog, error: message };
21
+ return { name, declared, current, installed, target: null, latest: null, status: 'unresolved', rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog, versionsFromLatest: null, error: message };
22
22
  }
23
- const { target, latest } = resolved;
23
+ const { target, latest, stableVersions } = resolved;
24
24
  if (target === null) {
25
- return { name, declared, current, installed, target: null, latest, status: 'unresolved', rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog, error: 'no stable versions found' };
25
+ return { name, declared, current, installed, target: null, latest, status: 'unresolved', rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog, versionsFromLatest: null, error: 'no stable versions found' };
26
26
  }
27
27
  const compareVersion = installed ?? current;
28
28
  const cmp = semverCompareForSpecifier({ versionA: compareVersion, versionB: target, specifier: rangeSpecifier });
@@ -33,7 +33,9 @@ async function auditOne({ name, rawVersion, lag, minimumReleaseAge, preReleaseFi
33
33
  status = 'ok';
34
34
  else
35
35
  status = 'behind';
36
- return { name, declared, current, installed, target, latest, status, rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog };
36
+ const compareIdx = stableVersions.indexOf(compareVersion);
37
+ const versionsFromLatest = compareIdx === -1 ? null : (stableVersions.length - 1) - compareIdx;
38
+ return { name, declared, current, installed, target, latest, status, rangeSpecifier, declaredSpecifier, specifierMismatch, fromCatalog, versionsFromLatest };
37
39
  }
38
40
  /**
39
41
  * Audit all dependencies in a package.json object.
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  export { auditDeps, buildCatalogUpdates } from './audit.js';
2
2
  export { DEFAULTS, loadConfigFile, rangePrefix, resolveConfigDir, resolveRangeSpecifier, resolveSameMajor } from './config.js';
3
- export { printResults } from './output.js';
3
+ export { printMonorepoResults, printResults } from './output.js';
4
+ export type { MonorepoPackageResult } from './output.js';
4
5
  export { computeTarget, fetchStableVersions, resolvePackage } from './resolve.js';
5
- export type { AuditResult, AuditStatus, BehindBehavior, Config, ConfigFile, InstalledVersionMap, PackageJson, PackageManager, RangeSpecifier, RangeSpecifierConfig, ResolvedPackage, SameMajorConfig, } from './types.js';
6
+ export { computeWidths, renderHeader, renderRows, statusLabel } from './table.js';
7
+ export type { TableWidths } from './table.js';
8
+ export type { AuditResult, AuditStatus, BehindBehavior, Config, ConfigFile, InstalledVersionMap, PackageJson, PackageManager, RangeSpecifier, RangeSpecifierConfig, ResolvedPackage, SameMajorConfig, WorkspacePackage, } from './types.js';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACjF,YAAY,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACjF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,YAAY,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
package/dist/src/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { auditDeps, buildCatalogUpdates } from './audit.js';
2
2
  export { DEFAULTS, loadConfigFile, rangePrefix, resolveConfigDir, resolveRangeSpecifier, resolveSameMajor } from './config.js';
3
- export { printResults } from './output.js';
3
+ export { printMonorepoResults, printResults } from './output.js';
4
4
  export { computeTarget, fetchStableVersions, resolvePackage } from './resolve.js';
5
+ export { computeWidths, renderHeader, renderRows, statusLabel } from './table.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { InstalledVersionMap, PackageManager } from './types.js';
2
2
  export { npmAdapter, parseNpmLock } from './adapters/npm.js';
3
- export { loadPnpmCatalog, parsePnpmLock, pnpmAdapter, resolveCatalogRefs, updatePnpmCatalog } from './adapters/pnpm.js';
3
+ export { findWorkspaceRoot, loadPnpmCatalog, parsePnpmLock, pnpmAdapter, resolveCatalogRefs, resolveWorkspacePackages, updatePnpmCatalog } from './adapters/pnpm.js';
4
4
  export interface LockfileAdapter {
5
5
  /** Filename to look for relative to the package.json directory. */
6
6
  filename: string;
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKrE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEvH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B,GAAG,mBAAmB,GAAG,IAAI,CAe7B;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAkBvE"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKrE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEpK,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B,GAAG,mBAAmB,GAAG,IAAI,CAe7B;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAkBvE"}
@@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import { destr } from 'destr';
4
4
  export { npmAdapter, parseNpmLock } from './adapters/npm.js';
5
- export { loadPnpmCatalog, parsePnpmLock, pnpmAdapter, resolveCatalogRefs, updatePnpmCatalog } from './adapters/pnpm.js';
5
+ export { findWorkspaceRoot, loadPnpmCatalog, parsePnpmLock, pnpmAdapter, resolveCatalogRefs, resolveWorkspacePackages, updatePnpmCatalog } from './adapters/pnpm.js';
6
6
  /**
7
7
  * Try each adapter in order, returning the first successfully parsed map.
8
8
  * Returns null if no matching lockfile is found.
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lockfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AASvH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,GAAG,EACH,QAAQ,GAIT;IACC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,SAAQ;QACV,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;YAC3D,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,YAAY,GAAoC;IACpD,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,mBAAmB,EAAE,KAAK,CAAC;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;QAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB,IAAI,GAAG,EAAE,CAAC;YACvE,MAAM,KAAK,GAAI,GAA+B,CAAC,cAAc,CAAA;YAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM;oBACnC,OAAO,IAAI,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lockfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AASpK;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,GAAG,EACH,QAAQ,GAIT;IACC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,SAAQ;QACV,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;YAC3D,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,YAAY,GAAoC;IACpD,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,mBAAmB,EAAE,KAAK,CAAC;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;QAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB,IAAI,GAAG,EAAE,CAAC;YACvE,MAAM,KAAK,GAAI,GAA+B,CAAC,cAAc,CAAA;YAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM;oBACnC,OAAO,IAAI,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,14 +1,57 @@
1
- import type { AuditResult, BehindBehavior, PackageManager, RangeSpecifierConfig, SameMajorConfig } from './types.js';
1
+ import type { AuditResult, BehindBehavior, PackageManager, RangeSpecifierConfig, SameMajorConfig, WorkspacePackage } from './types.js';
2
+ export declare function buildInstallCmds({ pm, packages, versionTarget, }: {
3
+ pm: PackageManager;
4
+ packages: AuditResult[];
5
+ versionTarget: 'target' | 'current';
6
+ }): string[];
7
+ export declare function formatRangeConfig(config: RangeSpecifierConfig): string;
8
+ export declare function buildSettingsLines({ lag, pm, behindBehavior, rangeSpecifier, minimumReleaseAge, sameMajor, }: {
9
+ lag: number;
10
+ pm: PackageManager;
11
+ behindBehavior: BehindBehavior;
12
+ rangeSpecifier: RangeSpecifierConfig;
13
+ minimumReleaseAge?: number;
14
+ sameMajor: SameMajorConfig;
15
+ }): string[];
16
+ export declare function buildCatalogEditLines({ packages, versionTarget, workspaceFile, label, }: {
17
+ packages: AuditResult[];
18
+ versionTarget: 'target' | 'current';
19
+ workspaceFile?: string;
20
+ label?: string;
21
+ }): string[];
22
+ export declare function buildViolationActions({ pm, violations, behind, behindBehavior, workspaceFile, fixed, }: {
23
+ pm: PackageManager;
24
+ violations: AuditResult[];
25
+ behind: AuditResult[];
26
+ behindBehavior: BehindBehavior;
27
+ workspaceFile?: string;
28
+ fixed?: string[];
29
+ }): string[];
30
+ export declare function buildSummaryTable(results: AuditResult[], behindBehavior: BehindBehavior): string[];
2
31
  export interface PrintResultsOptions {
3
32
  results: AuditResult[];
4
33
  lag: number;
5
34
  pm: PackageManager;
6
35
  behindBehavior: BehindBehavior;
7
36
  rangeSpecifier: RangeSpecifierConfig;
8
- sameMajor: SameMajorConfig;
37
+ sameMajor?: SameMajorConfig;
9
38
  minimumReleaseAge?: number;
10
39
  workspaceFile?: string;
11
40
  fixed?: string[];
12
41
  }
13
42
  export declare function printResults({ results, lag, pm, behindBehavior, rangeSpecifier, sameMajor, minimumReleaseAge, workspaceFile, fixed }: PrintResultsOptions): void;
43
+ export interface MonorepoPackageResult {
44
+ pkg: WorkspacePackage;
45
+ results: AuditResult[];
46
+ }
47
+ export declare function printMonorepoResults({ packages, lag, pm, behindBehavior, rangeSpecifier, sameMajor, minimumReleaseAge, workspaceFile, }: Omit<PrintResultsOptions, 'results'> & {
48
+ packages: MonorepoPackageResult[];
49
+ }): void;
50
+ export declare function writeSummary({ results, packages, lag, behindBehavior, summaryPath }: {
51
+ results?: AuditResult[];
52
+ packages?: MonorepoPackageResult[];
53
+ lag: number;
54
+ behindBehavior: BehindBehavior;
55
+ summaryPath: string;
56
+ }): void;
14
57
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAkB,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAsIpI,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,cAAc,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,oBAAoB,CAAA;IACpC,SAAS,EAAE,eAAe,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAqIhK"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
+ import { appendFileSync } from 'node:fs';
1
2
  import { rangePrefix } from './config.js';
2
- const COL = { name: 20, version: 16, status: 22 };
3
- function pad(str, len) {
4
- return str.padEnd(len);
5
- }
6
- function installCmd({ pm, packages, versionFn, exact = false, }) {
3
+ import { computeWidths, renderHeader, renderRows } from './table.js';
4
+ // ─── pure builders ────────────────────────────────────────────────────────────
5
+ function buildInstallCmd({ pm, packages, versionFn, exact = false, }) {
7
6
  const pkgs = packages.map(r => `${r.name}@${versionFn(r)}`).join(' ');
8
7
  const e = exact ? ' -E' : '';
9
8
  switch (pm) {
@@ -11,24 +10,18 @@ function installCmd({ pm, packages, versionFn, exact = false, }) {
11
10
  case 'npm': return `npm install${e} ${pkgs}`;
12
11
  }
13
12
  }
14
- /**
15
- * Generate install command(s) for a set of packages, grouping exact and
16
- * non-exact packages separately so the -E flag applies only where needed.
17
- */
18
- function installCmds({ pm, packages, versionTarget, }) {
13
+ export function buildInstallCmds({ pm, packages, versionTarget, }) {
19
14
  const ver = (r, specifier) => `${rangePrefix(specifier)}${versionTarget === 'current' ? r.current : r.target ?? ''}`;
20
15
  const exact = packages.filter(r => r.rangeSpecifier === 'exact');
21
16
  const nonExact = packages.filter(r => r.rangeSpecifier !== 'exact');
22
17
  const cmds = [];
23
- if (exact.length > 0) {
24
- cmds.push(installCmd({ pm, packages: exact, versionFn: r => ver(r, 'exact'), exact: true }));
25
- }
26
- if (nonExact.length > 0) {
27
- cmds.push(installCmd({ pm, packages: nonExact, versionFn: r => ver(r, r.rangeSpecifier) }));
28
- }
18
+ if (exact.length > 0)
19
+ cmds.push(buildInstallCmd({ pm, packages: exact, versionFn: r => ver(r, 'exact'), exact: true }));
20
+ if (nonExact.length > 0)
21
+ cmds.push(buildInstallCmd({ pm, packages: nonExact, versionFn: r => ver(r, r.rangeSpecifier) }));
29
22
  return cmds;
30
23
  }
31
- function formatRangeConfig(config) {
24
+ export function formatRangeConfig(config) {
32
25
  if (typeof config === 'string')
33
26
  return config;
34
27
  const def = config.default ?? 'exact';
@@ -38,7 +31,7 @@ function formatRangeConfig(config) {
38
31
  .join(', ');
39
32
  return overrides ? `${def} (default), ${overrides}` : def;
40
33
  }
41
- function printSettings({ lag, pm, behindBehavior, rangeSpecifier, minimumReleaseAge, sameMajor, }) {
34
+ export function buildSettingsLines({ lag, pm, behindBehavior, rangeSpecifier, minimumReleaseAge, sameMajor, }) {
42
35
  const behindDesc = behindBehavior === 'report'
43
36
  ? 'report packages behind target'
44
37
  : 'ignore packages behind target';
@@ -54,83 +47,132 @@ function printSettings({ lag, pm, behindBehavior, rangeSpecifier, minimumRelease
54
47
  ? rangeSpecifier
55
48
  : (rangeSpecifier.default ?? 'exact');
56
49
  const rangeNote = hasOverrides ? 'per-package specifiers configured' : rangeDesc[effectiveDefault];
57
- const col = (s) => s.padEnd(10);
58
- console.log('settings');
59
- console.log(` ${col('lag')}${col(String(lag))}; stay ${lag} version${lag === 1 ? '' : 's'} behind latest`);
60
- console.log(` ${col('pm')}${col(pm)}; the chosen package manager`);
61
- console.log(` ${col('behind')}${col(behindBehavior)}; ${behindDesc}`);
62
- console.log(` ${col('range')}${rangeVal}; ${rangeNote}`);
63
- if (minimumReleaseAge !== undefined) {
64
- console.log(` ${col('minAge')}${col(String(minimumReleaseAge))}; skip versions published within the last ${minimumReleaseAge} day${minimumReleaseAge === 1 ? '' : 's'}`);
65
- }
66
50
  const sameMajorVal = typeof sameMajor === 'boolean' ? String(sameMajor) : 'per-pkg';
67
- console.log(` ${col('sameMajor')}${col(sameMajorVal)}; ${typeof sameMajor === 'boolean' ? (sameMajor ? 'restrict candidates to current major' : 'consider all majors') : 'per-package major restriction'}`);
51
+ const sameMajorDesc = typeof sameMajor === 'boolean'
52
+ ? (sameMajor ? 'restrict candidates to current major' : 'consider all majors')
53
+ : 'per-package major restriction';
54
+ const rows = [
55
+ ['lag', String(lag), `stay ${lag} version${lag === 1 ? '' : 's'} behind latest`],
56
+ ['pm', pm, 'the chosen package manager'],
57
+ ['behind', behindBehavior, behindDesc],
58
+ ['range', rangeVal, rangeNote],
59
+ ];
60
+ if (minimumReleaseAge !== undefined)
61
+ rows.push(['minAge', String(minimumReleaseAge), `skip versions published within the last ${minimumReleaseAge} day${minimumReleaseAge === 1 ? '' : 's'}`]);
62
+ rows.push(['sameMajor', sameMajorVal, sameMajorDesc]);
63
+ const PADDING = 2;
64
+ const keyWidth = Math.max('setting'.length, ...rows.map(r => r[0].length)) + PADDING;
65
+ const valWidth = Math.max('value'.length, ...rows.map(r => r[1].length)) + PADDING;
66
+ const divider = '─'.repeat(keyWidth + valWidth + rows.reduce((m, r) => Math.max(m, r[2].length), 'description'.length));
67
+ const lines = [
68
+ 'settings',
69
+ `${'setting'.padEnd(keyWidth)}${'value'.padEnd(valWidth)}description`,
70
+ divider,
71
+ ...rows.map(([k, v, d]) => `${k.padEnd(keyWidth)}${v.padEnd(valWidth)}${d}`),
72
+ ];
73
+ return lines;
68
74
  }
69
- function printCatalogEdits({ packages, versionTarget, workspaceFile = 'pnpm-workspace.yaml', label, }) {
75
+ export function buildCatalogEditLines({ packages, versionTarget, workspaceFile = 'pnpm-workspace.yaml', label, }) {
70
76
  const heading = label
71
77
  ?? (versionTarget === 'target' ? 'to pin back (update catalog in' : 'to re-pin (update catalog in');
72
- console.log(`\n${heading} ${workspaceFile}):`);
78
+ const lines = [`\n${heading} ${workspaceFile}):`];
73
79
  for (const r of packages) {
74
80
  const ver = versionTarget === 'target' ? r.target : r.current;
75
81
  if (ver)
76
- console.log(` ${r.name}: ${ver}`);
82
+ lines.push(` ${r.name}: ${ver}`);
77
83
  }
78
- console.log(`\n or run with --fix to apply automatically`);
84
+ lines.push(`\n or run with --fix to apply automatically`);
85
+ return lines;
79
86
  }
80
- export function printResults({ results, lag, pm, behindBehavior, rangeSpecifier, sameMajor, minimumReleaseAge, workspaceFile, fixed }) {
87
+ export function buildViolationActions({ pm, violations, behind, behindBehavior, workspaceFile, fixed, }) {
88
+ const lines = [];
89
+ const standardViolations = violations.filter(r => !r.fromCatalog);
90
+ const catalogViolations = violations.filter(r => r.fromCatalog);
91
+ if (standardViolations.length > 0) {
92
+ lines.push('\nto pin back:');
93
+ for (const cmd of buildInstallCmds({ pm, packages: standardViolations, versionTarget: 'target' }))
94
+ lines.push(` ${cmd}`);
95
+ }
96
+ if (catalogViolations.length > 0) {
97
+ if (fixed !== undefined && fixed.length > 0) {
98
+ const file = workspaceFile ?? 'pnpm-workspace.yaml';
99
+ lines.push(`\ncatalog updated in ${file}:`);
100
+ for (const name of fixed)
101
+ lines.push(` ${name}`);
102
+ }
103
+ else {
104
+ lines.push(...buildCatalogEditLines({ packages: catalogViolations, versionTarget: 'target', ...(workspaceFile !== undefined ? { workspaceFile } : {}) }));
105
+ }
106
+ }
107
+ if (behindBehavior === 'report' && behind.length > 0) {
108
+ const standardBehind = behind.filter(r => !r.fromCatalog);
109
+ const catalogBehind = behind.filter(r => r.fromCatalog);
110
+ if (standardBehind.length > 0) {
111
+ lines.push('\nsafe to upgrade (currently behind lag target):');
112
+ for (const cmd of buildInstallCmds({ pm, packages: standardBehind, versionTarget: 'target' }))
113
+ lines.push(` ${cmd}`);
114
+ }
115
+ if (catalogBehind.length > 0) {
116
+ lines.push(...buildCatalogEditLines({ packages: catalogBehind, versionTarget: 'target', label: 'safe to upgrade (update catalog in', ...(workspaceFile !== undefined ? { workspaceFile } : {}) }));
117
+ }
118
+ }
119
+ return lines;
120
+ }
121
+ export function buildSummaryTable(results, behindBehavior) {
122
+ const sorted = results.toSorted((a, b) => a.name.localeCompare(b.name));
123
+ const hasInstalled = results.some(r => r.installed !== null);
124
+ const lines = [];
125
+ const header = ['package', 'declared', '→ target', ...(hasInstalled ? ['installed'] : []), 'latest', 'gap', 'status'];
126
+ const separator = header.map(() => '---');
127
+ lines.push(`| ${header.join(' | ')} |`);
128
+ lines.push(`| ${separator.join(' | ')} |`);
129
+ for (const r of sorted) {
130
+ let statusLabel;
131
+ if (r.status === 'pin')
132
+ statusLabel = ':arrow_down: will pin back';
133
+ else if (r.status === 'unresolved')
134
+ statusLabel = ':x: unresolved';
135
+ else if (r.status === 'behind' && behindBehavior === 'report')
136
+ statusLabel = ':arrow_up: safe to upgrade';
137
+ else
138
+ statusLabel = ':white_check_mark: ok';
139
+ const cells = [
140
+ r.name,
141
+ r.declared,
142
+ r.target ?? '—',
143
+ ...(hasInstalled ? [r.installed ?? '—'] : []),
144
+ r.latest ?? '—',
145
+ r.versionsFromLatest !== null ? String(r.versionsFromLatest) : '—',
146
+ statusLabel,
147
+ ];
148
+ lines.push(`| ${cells.join(' | ')} |`);
149
+ }
150
+ return lines;
151
+ }
152
+ export function printResults({ results, lag, pm, behindBehavior, rangeSpecifier, sameMajor = true, minimumReleaseAge, workspaceFile, fixed }) {
81
153
  const violations = results.filter(r => r.status === 'pin');
82
154
  const behind = results.filter(r => r.status === 'behind');
83
155
  const unresolved = results.filter(r => r.status === 'unresolved');
84
156
  const mismatches = results.filter(r => r.specifierMismatch);
85
- // Exclude violations from re-pin — the pin-back command already covers them.
86
157
  const mismatchesOnly = mismatches.filter(r => r.status !== 'pin');
87
- const catalogViolations = violations.filter(r => r.fromCatalog);
88
- const standardViolations = violations.filter(r => !r.fromCatalog);
89
158
  const catalogMismatches = mismatchesOnly.filter(r => r.fromCatalog);
90
159
  const standardMismatches = mismatchesOnly.filter(r => !r.fromCatalog);
91
160
  const hasActions = violations.length > 0 || (behindBehavior === 'report' && behind.length > 0);
92
- const hasInstalled = results.some(r => r.installed !== null);
93
161
  console.log(`\nrecul staying ${lag} version${lag === 1 ? '' : 's'} behind latest\n`);
94
- printSettings({ lag, pm, behindBehavior, rangeSpecifier, sameMajor, ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}) });
162
+ for (const line of buildSettingsLines({ lag, pm, behindBehavior, rangeSpecifier, sameMajor, ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}) }))
163
+ console.log(line);
95
164
  console.log();
96
- // Column order: package · declared · → target · installed · latest · status
97
- const versionCols = hasInstalled ? 4 : 3;
98
- const divider = '─'.repeat(COL.name + COL.version * versionCols + COL.status + 4);
99
- const header = `${pad('package', COL.name)
100
- + pad('declared', COL.version)
101
- + pad('→ target', COL.version)
102
- + (hasInstalled ? pad('installed', COL.version) : '')
103
- + pad('latest', COL.version)}status`;
165
+ const sorted = results.toSorted((a, b) => a.name.localeCompare(b.name));
166
+ const w = computeWidths(sorted, behindBehavior);
167
+ const { header, divider } = renderHeader(w);
104
168
  console.log(header);
105
169
  console.log(divider);
106
- const sorted = results.toSorted((a, b) => a.name.localeCompare(b.name));
107
- for (const r of sorted) {
108
- let statusLabel;
109
- if (r.status === 'pin')
110
- statusLabel = '↓ will pin back';
111
- else if (r.status === 'ok')
112
- statusLabel = '✓ ok';
113
- else if (r.status === 'behind' && behindBehavior === 'report')
114
- statusLabel = '↑ safe to upgrade';
115
- else if (r.status === 'behind')
116
- statusLabel = '✓ ok';
117
- else
118
- statusLabel = '✗ unresolved';
119
- if (r.specifierMismatch) {
120
- statusLabel += ` ⚠ declared ${r.declaredSpecifier}`;
121
- }
122
- console.log(pad(r.name, COL.name)
123
- + pad(r.declared, COL.version)
124
- + pad(r.target ?? '—', COL.version)
125
- + (hasInstalled ? pad(r.installed ?? '—', COL.version) : '')
126
- + pad(r.latest ?? '—', COL.version)
127
- + statusLabel);
128
- }
170
+ for (const row of renderRows(sorted, w, behindBehavior))
171
+ console.log(row);
129
172
  if (unresolved.length > 0) {
130
173
  console.log('\nunresolved:');
131
- for (const r of unresolved) {
174
+ for (const r of unresolved)
132
175
  console.log(` ${r.name}: ${r.error}`);
133
- }
134
176
  }
135
177
  if (mismatches.length > 0) {
136
178
  console.log();
@@ -146,55 +188,83 @@ export function printResults({ results, lag, pm, behindBehavior, rangeSpecifier,
146
188
  }
147
189
  if (!hasActions && mismatchesOnly.length > 0) {
148
190
  if (standardMismatches.length > 0) {
149
- for (const cmd of installCmds({ pm, packages: standardMismatches, versionTarget: 'current' })) {
191
+ for (const cmd of buildInstallCmds({ pm, packages: standardMismatches, versionTarget: 'current' }))
150
192
  console.log(`\nto re-pin:\n ${cmd}`);
151
- }
152
193
  }
153
194
  if (catalogMismatches.length > 0) {
154
- printCatalogEdits({ packages: catalogMismatches, versionTarget: 'current', ...(workspaceFile !== undefined ? { workspaceFile } : {}) });
195
+ for (const line of buildCatalogEditLines({ packages: catalogMismatches, versionTarget: 'current', ...(workspaceFile !== undefined ? { workspaceFile } : {}) }))
196
+ console.log(line);
155
197
  }
156
198
  console.log();
157
199
  return;
158
200
  }
159
- if (standardViolations.length > 0) {
160
- const cmds = installCmds({ pm, packages: standardViolations, versionTarget: 'target' });
161
- console.log(`\nto pin back:`);
162
- for (const cmd of cmds)
163
- console.log(` ${cmd}`);
164
- }
165
- if (catalogViolations.length > 0) {
166
- if (fixed !== undefined && fixed.length > 0) {
167
- const file = workspaceFile ?? 'pnpm-workspace.yaml';
168
- console.log(`\ncatalog updated in ${file}:`);
169
- for (const name of fixed)
170
- console.log(` ${name}`);
171
- }
172
- else {
173
- printCatalogEdits({ packages: catalogViolations, versionTarget: 'target', ...(workspaceFile !== undefined ? { workspaceFile } : {}) });
174
- }
175
- }
176
- if (behindBehavior === 'report' && behind.length > 0) {
177
- const catalogBehind = behind.filter(r => r.fromCatalog);
178
- const standardBehind = behind.filter(r => !r.fromCatalog);
179
- if (standardBehind.length > 0) {
180
- const cmds = installCmds({ pm, packages: standardBehind, versionTarget: 'target' });
181
- console.log(`\nsafe to upgrade (currently behind lag target):`);
182
- for (const cmd of cmds)
183
- console.log(` ${cmd}`);
184
- }
185
- if (catalogBehind.length > 0) {
186
- printCatalogEdits({ packages: catalogBehind, versionTarget: 'target', label: 'safe to upgrade (update catalog in', ...(workspaceFile !== undefined ? { workspaceFile } : {}) });
187
- }
188
- }
201
+ for (const line of buildViolationActions({ pm, violations, behind, behindBehavior, ...(workspaceFile !== undefined ? { workspaceFile } : {}), ...(fixed !== undefined ? { fixed } : {}) }))
202
+ console.log(line);
189
203
  if (standardMismatches.length > 0) {
190
- const cmds = installCmds({ pm, packages: standardMismatches, versionTarget: 'current' });
191
204
  console.log(`\nto re-pin:`);
192
- for (const cmd of cmds)
205
+ for (const cmd of buildInstallCmds({ pm, packages: standardMismatches, versionTarget: 'current' }))
193
206
  console.log(` ${cmd}`);
194
207
  }
195
208
  if (catalogMismatches.length > 0) {
196
- printCatalogEdits({ packages: catalogMismatches, versionTarget: 'current', ...(workspaceFile !== undefined ? { workspaceFile } : {}) });
209
+ for (const line of buildCatalogEditLines({ packages: catalogMismatches, versionTarget: 'current', ...(workspaceFile !== undefined ? { workspaceFile } : {}) }))
210
+ console.log(line);
211
+ }
212
+ console.log();
213
+ }
214
+ export function printMonorepoResults({ packages, lag, pm, behindBehavior, rangeSpecifier, sameMajor = true, minimumReleaseAge, workspaceFile, }) {
215
+ const allResults = packages.flatMap(p => p.results);
216
+ const violations = allResults.filter(r => r.status === 'pin');
217
+ const behind = allResults.filter(r => r.status === 'behind');
218
+ const hasActions = violations.length > 0 || (behindBehavior === 'report' && behind.length > 0);
219
+ console.log(`\nrecul staying ${lag} version${lag === 1 ? '' : 's'} behind latest\n`);
220
+ for (const line of buildSettingsLines({ lag, pm, behindBehavior, rangeSpecifier, sameMajor, ...(minimumReleaseAge !== undefined ? { minimumReleaseAge } : {}) }))
221
+ console.log(line);
222
+ console.log();
223
+ const w = computeWidths(allResults, behindBehavior);
224
+ const { header, divider } = renderHeader(w);
225
+ for (const { pkg, results } of packages) {
226
+ if (results.length === 0)
227
+ continue;
228
+ const sorted = results.toSorted((a, b) => a.name.localeCompare(b.name));
229
+ console.log(`─── ${pkg.name} ${'─'.repeat(Math.max(0, divider.length - pkg.name.length - 5))}`);
230
+ console.log(header);
231
+ console.log(divider);
232
+ for (const row of renderRows(sorted, w, behindBehavior))
233
+ console.log(row);
234
+ console.log();
197
235
  }
236
+ if (!hasActions) {
237
+ console.log('all audited packages are within the lag policy ✓\n');
238
+ return;
239
+ }
240
+ for (const line of buildViolationActions({ pm, violations, behind, behindBehavior, ...(workspaceFile !== undefined ? { workspaceFile } : {}) }))
241
+ console.log(line);
198
242
  console.log();
199
243
  }
244
+ export function writeSummary({ results, packages, lag, behindBehavior, summaryPath }) {
245
+ const allResults = packages !== undefined ? packages.flatMap(p => p.results) : (results ?? []);
246
+ const violations = allResults.filter(r => r.status === 'pin' || r.status === 'unresolved' || (r.status === 'behind' && behindBehavior === 'report'));
247
+ const icon = violations.length > 0 ? ':x:' : ':white_check_mark:';
248
+ const lines = [];
249
+ lines.push(`## ${icon} recul — staying ${lag} version${lag === 1 ? '' : 's'} behind latest\n`);
250
+ if (packages !== undefined) {
251
+ for (const { pkg, results: pkgResults } of packages) {
252
+ if (pkgResults.length === 0)
253
+ continue;
254
+ lines.push(`### ${pkg.name}\n`);
255
+ lines.push(...buildSummaryTable(pkgResults, behindBehavior));
256
+ lines.push('');
257
+ }
258
+ }
259
+ else {
260
+ lines.push(...buildSummaryTable(allResults, behindBehavior));
261
+ }
262
+ if (violations.length === 0) {
263
+ lines.push('\n> All audited packages are within the lag policy.');
264
+ }
265
+ else {
266
+ lines.push(`\n> **${violations.length} violation${violations.length === 1 ? '' : 's'} found.** Run \`recul --fix\` to apply catalog fixes or see the install commands in the workflow log.`);
267
+ }
268
+ appendFileSync(summaryPath, `${lines.join('\n')}\n`);
269
+ }
200
270
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { AuditResult, BehindBehavior } from './types.js';
2
+ export interface TableWidths {
3
+ name: number;
4
+ declared: number;
5
+ target: number;
6
+ /** 0 when the installed column is hidden (no lockfile). */
7
+ installed: number;
8
+ latest: number;
9
+ gap: number;
10
+ status: number;
11
+ }
12
+ export declare function statusLabel(r: AuditResult, behindBehavior: BehindBehavior): string;
13
+ /**
14
+ * Compute column widths from a set of rows.
15
+ * Pass all rows (e.g. across all workspace packages) so widths stay aligned.
16
+ */
17
+ export declare function computeWidths(rows: AuditResult[], behindBehavior: BehindBehavior): TableWidths;
18
+ export declare function renderHeader(widths: TableWidths): {
19
+ header: string;
20
+ divider: string;
21
+ };
22
+ export declare function renderRows(rows: AuditResult[], widths: TableWidths, behindBehavior: BehindBehavior): string[];
23
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAa7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAelF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,WAAW,CAY9F;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAWrF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,EAAE,CAW7G"}
@@ -0,0 +1,58 @@
1
+ const PADDING = 2;
2
+ function pad(str, len) {
3
+ return str.padEnd(len);
4
+ }
5
+ function colWidth(header, values) {
6
+ const max = values.reduce((m, v) => Math.max(m, (v ?? '—').length), header.length);
7
+ return max + PADDING;
8
+ }
9
+ export function statusLabel(r, behindBehavior) {
10
+ let label;
11
+ if (r.status === 'pin')
12
+ label = '↓ will pin back';
13
+ else if (r.status === 'ok')
14
+ label = '✓ ok';
15
+ else if (r.status === 'behind' && behindBehavior === 'report')
16
+ label = '↑ safe to upgrade';
17
+ else if (r.status === 'behind')
18
+ label = '✓ ok';
19
+ else
20
+ label = '✗ unresolved';
21
+ if (r.specifierMismatch)
22
+ label += ` ⚠ declared ${r.declaredSpecifier}`;
23
+ return label;
24
+ }
25
+ /**
26
+ * Compute column widths from a set of rows.
27
+ * Pass all rows (e.g. across all workspace packages) so widths stay aligned.
28
+ */
29
+ export function computeWidths(rows, behindBehavior) {
30
+ const hasInstalled = rows.some(r => r.installed !== null);
31
+ const labels = rows.map(r => statusLabel(r, behindBehavior));
32
+ return {
33
+ name: colWidth('package', rows.map(r => r.name)),
34
+ declared: colWidth('declared', rows.map(r => r.declared)),
35
+ target: colWidth('→ target', rows.map(r => r.target)),
36
+ installed: hasInstalled ? colWidth('installed', rows.map(r => r.installed)) : 0,
37
+ latest: colWidth('latest', rows.map(r => r.latest)),
38
+ gap: colWidth('gap', rows.map(r => r.versionsFromLatest !== null ? String(r.versionsFromLatest) : null)),
39
+ status: 'status'.length + Math.max(0, ...labels.map(s => s.length - 'status'.length)),
40
+ };
41
+ }
42
+ export function renderHeader(widths) {
43
+ const hasInstalled = widths.installed > 0;
44
+ const header = `${pad('package', widths.name)}${pad('declared', widths.declared)}${pad('→ target', widths.target)}${hasInstalled ? pad('installed', widths.installed) : ''}${pad('latest', widths.latest)}${pad('gap', widths.gap)}status`;
45
+ const divider = '─'.repeat(widths.name + widths.declared + widths.target + widths.installed + widths.latest + widths.gap + widths.status);
46
+ return { header, divider };
47
+ }
48
+ export function renderRows(rows, widths, behindBehavior) {
49
+ const hasInstalled = widths.installed > 0;
50
+ return rows.map(r => pad(r.name, widths.name)
51
+ + pad(r.declared, widths.declared)
52
+ + pad(r.target ?? '—', widths.target)
53
+ + (hasInstalled ? pad(r.installed ?? '—', widths.installed) : '')
54
+ + pad(r.latest ?? '—', widths.latest)
55
+ + pad(r.versionsFromLatest !== null ? String(r.versionsFromLatest) : '—', widths.gap)
56
+ + statusLabel(r, behindBehavior));
57
+ }
58
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,CAAC,CAAA;AAEjB,SAAS,GAAG,CAAC,GAAW,EAAE,GAAW;IACnC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAqC;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAClF,OAAO,GAAG,GAAG,OAAO,CAAA;AACtB,CAAC;AAaD,MAAM,UAAU,WAAW,CAAC,CAAc,EAAE,cAA8B;IACxE,IAAI,KAAa,CAAA;IACjB,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;QACpB,KAAK,GAAG,iBAAiB,CAAA;SACtB,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;QACxB,KAAK,GAAG,MAAM,CAAA;SACX,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,cAAc,KAAK,QAAQ;QAC3D,KAAK,GAAG,mBAAmB,CAAA;SACxB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,KAAK,GAAG,MAAM,CAAA;;QAEd,KAAK,GAAG,cAAc,CAAA;IACxB,IAAI,CAAC,CAAC,iBAAiB;QACrB,KAAK,IAAI,gBAAgB,CAAC,CAAC,iBAAiB,EAAE,CAAA;IAChD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAmB,EAAE,cAA8B;IAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAA;IAC5D,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrD,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;KACtF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAC5C,GAAG,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAClC,GAAG,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAChC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACvD,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAC9B,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CACxB,QAAQ,CAAA;IACR,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACzI,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,MAAmB,EAAE,cAA8B;IACjG,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAA;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAClB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;UACtB,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;UAChC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;UACnC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;UAC/D,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;UACnC,GAAG,CAAC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;UACnF,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,CACjC,CAAA;AACH,CAAC"}
@@ -71,11 +71,20 @@ export interface AuditResult {
71
71
  specifierMismatch: boolean;
72
72
  /** True when the version was declared as a pnpm catalog reference. */
73
73
  fromCatalog: boolean;
74
+ /** Number of stable versions between the installed/current version and latest. Null when unresolved. */
75
+ versionsFromLatest: number | null;
74
76
  error?: string;
75
77
  }
76
78
  /** Shape of what we read from package.json. */
77
79
  export interface PackageJson {
80
+ name?: string;
78
81
  dependencies?: Record<string, string>;
79
82
  devDependencies?: Record<string, string>;
80
83
  }
84
+ export interface WorkspacePackage {
85
+ /** Package name from package.json, or directory path if name is absent. */
86
+ name: string;
87
+ /** Absolute path to the package directory. */
88
+ dir: string;
89
+ }
81
90
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAA;AAE3C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE/D,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,cAAc,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,oBAAoB,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,EAAE,eAAe,CAAA;CAC3B;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEhE,iDAAiD;AACjD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAErE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,WAAW,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,+EAA+E;IAC/E,iBAAiB,EAAE,OAAO,CAAA;IAC1B,sEAAsE;IACtE,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAA;AAE3C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE/D,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,cAAc,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,oBAAoB,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,EAAE,eAAe,CAAA;CAC3B;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEhE,iDAAiD;AACjD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAErE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,WAAW,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,+EAA+E;IAC/E,iBAAiB,EAAE,OAAO,CAAA;IAC1B,sEAAsE;IACtE,WAAW,EAAE,OAAO,CAAA;IACpB,wGAAwG;IACxG,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAA;CACZ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@crbroughton/recul",
3
3
  "type": "module",
4
- "version": "0.4.1",
4
+ "version": "0.6.0",
5
5
  "description": "Stay N versions behind the latest published release of your npm dependencies to avoid supply chain attacks.",
6
6
  "author": {
7
7
  "name": "Craig R Broughton",