ruckup 0.1.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/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +323 -0
- package/dist/cli.js.map +1 -0
- package/dist/dep-diff.d.ts +9 -0
- package/dist/dep-diff.d.ts.map +1 -0
- package/dist/dep-diff.js +50 -0
- package/dist/dep-diff.js.map +1 -0
- package/dist/doctor.d.ts +12 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +102 -0
- package/dist/doctor.js.map +1 -0
- package/dist/engine.d.ts +14 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +128 -0
- package/dist/engine.js.map +1 -0
- package/dist/filter.d.ts +13 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +68 -0
- package/dist/filter.js.map +1 -0
- package/dist/format.d.ts +11 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +255 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/inline-diff.d.ts +9 -0
- package/dist/inline-diff.d.ts.map +1 -0
- package/dist/inline-diff.js +88 -0
- package/dist/inline-diff.js.map +1 -0
- package/dist/interactive.d.ts +13 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +231 -0
- package/dist/interactive.js.map +1 -0
- package/dist/open.d.ts +15 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +52 -0
- package/dist/open.js.map +1 -0
- package/dist/package.d.ts +32 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +143 -0
- package/dist/package.js.map +1 -0
- package/dist/registry.d.ts +26 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +164 -0
- package/dist/registry.js.map +1 -0
- package/dist/release-info.d.ts +40 -0
- package/dist/release-info.d.ts.map +1 -0
- package/dist/release-info.js +165 -0
- package/dist/release-info.js.map +1 -0
- package/dist/security.d.ts +10 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +72 -0
- package/dist/security.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +50 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +23 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +229 -0
- package/dist/version.js.map +1 -0
- package/package.json +66 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ruckup CLI ā npm-check-updates with security inspection.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { cosmiconfig } from 'cosmiconfig';
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { createRequire } from 'node:module';
|
|
11
|
+
import { DEFAULT_OPTIONS } from './types.js';
|
|
12
|
+
import { checkUpgrades, applyUpgrades } from './engine.js';
|
|
13
|
+
import { formatOutput } from './format.js';
|
|
14
|
+
import { renderAllInlineDiffs } from './inline-diff.js';
|
|
15
|
+
import { runInteractiveSelect } from './interactive.js';
|
|
16
|
+
import { openUrlsForUpgrades } from './open.js';
|
|
17
|
+
import { runDoctorMode } from './doctor.js';
|
|
18
|
+
import { writeUpgrades } from './package.js';
|
|
19
|
+
const require = createRequire(import.meta.url);
|
|
20
|
+
const { version: pkgVersion } = require('../package.json');
|
|
21
|
+
function createProgram() {
|
|
22
|
+
const program = new Command();
|
|
23
|
+
program
|
|
24
|
+
.name('ruckup')
|
|
25
|
+
.description('Check for outdated, incorrect, and unused dependencies ā with security inspection.')
|
|
26
|
+
.version(pkgVersion, '-v, --version')
|
|
27
|
+
// Core options (ncu-compatible)
|
|
28
|
+
.option('-u, --upgrade', 'Overwrite package file with upgraded versions', false)
|
|
29
|
+
.option('-i, --interactive', 'Choose which packages to upgrade interactively', false)
|
|
30
|
+
.option('-g, --global', 'Check global packages instead of in the current project', false)
|
|
31
|
+
.option('-f, --filter <matches...>', 'Include only package names matching the given string, glob, or regex')
|
|
32
|
+
.option('-x, --reject <matches...>', 'Exclude packages matching the given string, glob, or regex')
|
|
33
|
+
.option('-t, --target <value>', 'Upgrade target: latest, newest, greatest, minor, patch, semver, or @tag', 'latest')
|
|
34
|
+
.option('--packageFile <path>', 'Package file to check', './package.json')
|
|
35
|
+
.option('-p, --packageManager <name>', 'npm, yarn, pnpm, bun', 'npm')
|
|
36
|
+
.option('-r, --registry <url>', 'Custom npm registry URL', 'https://registry.npmjs.org')
|
|
37
|
+
.option('--registryType <type>', 'npm or json', 'npm')
|
|
38
|
+
.option('--dep <deps>', 'Dependency types to check (prod,dev,optional,peer,packageManager)', 'prod,dev,optional')
|
|
39
|
+
.option('--pre', 'Include prerelease versions', false)
|
|
40
|
+
// Output options
|
|
41
|
+
.option('-s, --silent', "Don't output anything", false)
|
|
42
|
+
.option('-l, --loglevel <level>', 'Log level: silent, error, minimal, warn, info, verbose, silly', 'warn')
|
|
43
|
+
.option('--format <formats...>', 'Output formatting: group, dep, time, lines, repo, homepage, ownerChanged, installedVersion, diff')
|
|
44
|
+
.option('--color', 'Force color output', true)
|
|
45
|
+
.option('-j, --jsonAll', 'Output new package file instead of human-readable message', false)
|
|
46
|
+
.option('--jsonUpgraded', 'Output upgraded dependencies in json', false)
|
|
47
|
+
.option('--jsonDeps', 'Output dependency sections in json', false)
|
|
48
|
+
// Network
|
|
49
|
+
.option('--concurrency <number>', 'Max simultaneous requests to registry', '8')
|
|
50
|
+
.option('--retry <number>', 'Number of retries for failed requests', '3')
|
|
51
|
+
.option('--timeout <ms>', 'Global timeout in milliseconds', '30000')
|
|
52
|
+
// Cache
|
|
53
|
+
.option('--cache', 'Enable caching of registry data', false)
|
|
54
|
+
.option('--cacheFile <path>', 'Cache file path', '~/.ncu-cache.json')
|
|
55
|
+
.option('--cacheExpiration <minutes>', 'Cache expiration in minutes', '10')
|
|
56
|
+
.option('--cacheClear', 'Clear the cache', false)
|
|
57
|
+
// Filtering
|
|
58
|
+
.option('--filterVersion <matches...>', 'Filter on package version using string, glob, or regex')
|
|
59
|
+
.option('--rejectVersion <matches...>', 'Exclude packages matching a version range')
|
|
60
|
+
.option('--enginesNode', 'Include only packages that satisfy engines.node', false)
|
|
61
|
+
.option('-m, --minimal', "Do not upgrade newer versions that are already satisfied by the version range", false)
|
|
62
|
+
.option('--peer', 'Check peer dependencies of installed packages and filter updates to compatible versions', false)
|
|
63
|
+
.option('--deprecated', 'Include deprecated packages', true)
|
|
64
|
+
.option('--removeRange', 'Remove version ranges from the final package version', false)
|
|
65
|
+
.option('--cooldown <period>', 'Minimum package age (e.g., 7d, 12h, 30m)')
|
|
66
|
+
// Workspace
|
|
67
|
+
.option('--workspace <names...>', 'Run in specific workspace(s)')
|
|
68
|
+
.option('-w, --workspaces', 'Run on all workspaces', false)
|
|
69
|
+
.option('--root', 'Include root package with --workspaces', true)
|
|
70
|
+
.option('--deep', 'Recursively find all package.json files', false)
|
|
71
|
+
.option('--cwd <path>', 'Working directory')
|
|
72
|
+
.option('--prefix <path>', 'Current npm working directory')
|
|
73
|
+
// Doctor
|
|
74
|
+
.option('-d, --doctor', 'Iteratively installs upgrades and runs tests to identify breaking upgrades', false)
|
|
75
|
+
.option('--doctorInstall <command>', 'Custom install command for doctor mode')
|
|
76
|
+
.option('--doctorTest <command>', 'Custom test command for doctor mode')
|
|
77
|
+
// Config
|
|
78
|
+
.option('--configFileName <name>', 'Config file name (.ncurc.{json,yml,js,cjs})')
|
|
79
|
+
.option('--configFilePath <path>', 'Path to config file directory')
|
|
80
|
+
.option('--mergeConfig', 'Merge nested configs with root config for --deep', false)
|
|
81
|
+
// I/O
|
|
82
|
+
.option('--stdin', 'Read package.json from stdin', false)
|
|
83
|
+
.option('--packageData <json>', 'Package file data (or use --stdin)')
|
|
84
|
+
.option('--verbose', 'Log additional information for debugging', false)
|
|
85
|
+
.option('-e, --errorLevel <number>', 'Set error level (1=default, 2=exit 0 only if no upgrades)', '1')
|
|
86
|
+
// ruckup additions
|
|
87
|
+
.option('--security', 'Check for security advisories against to-be-upgraded packages', false)
|
|
88
|
+
.option('--inspect-deps', 'Show dependency diff between current and target versions', false)
|
|
89
|
+
.option('--diff', 'Show inline diff/changelog in terminal for each upgrade', false)
|
|
90
|
+
.option('--open-release', 'Open release notes in browser for upgraded packages', false)
|
|
91
|
+
.option('--open-diff', 'Open SCM compare view in browser for upgraded packages', false)
|
|
92
|
+
.option('--open-repo', 'Open repository in browser for upgraded packages', false)
|
|
93
|
+
.option('--github-token <token>', 'GitHub personal access token for API requests');
|
|
94
|
+
return program;
|
|
95
|
+
}
|
|
96
|
+
/** Load .ncurc config and merge with CLI options */
|
|
97
|
+
async function loadConfig(cliOpts) {
|
|
98
|
+
const configFileName = cliOpts.configFileName ?? '.ncurc';
|
|
99
|
+
const configFilePath = cliOpts.configFilePath ?? undefined;
|
|
100
|
+
let fileConfig = {};
|
|
101
|
+
try {
|
|
102
|
+
const explorer = cosmiconfig('ncu', {
|
|
103
|
+
searchPlaces: [
|
|
104
|
+
`${configFileName}.json`,
|
|
105
|
+
`${configFileName}.yml`,
|
|
106
|
+
`${configFileName}.yaml`,
|
|
107
|
+
`${configFileName}.js`,
|
|
108
|
+
`${configFileName}.cjs`,
|
|
109
|
+
],
|
|
110
|
+
searchStrategy: 'global',
|
|
111
|
+
});
|
|
112
|
+
const result = configFilePath
|
|
113
|
+
? await explorer.search(configFilePath)
|
|
114
|
+
: await explorer.search();
|
|
115
|
+
if (result && !result.isEmpty) {
|
|
116
|
+
fileConfig = result.config;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Config file not found or invalid ā that's fine
|
|
121
|
+
}
|
|
122
|
+
// Merge: CLI > config file > defaults
|
|
123
|
+
const merged = { ...DEFAULT_OPTIONS };
|
|
124
|
+
// Apply config file values
|
|
125
|
+
for (const [key, value] of Object.entries(fileConfig)) {
|
|
126
|
+
if (value !== undefined) {
|
|
127
|
+
merged[key] = value;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Apply CLI values (commander uses camelCase)
|
|
131
|
+
const cliMapping = {
|
|
132
|
+
inspectDeps: 'inspectDeps',
|
|
133
|
+
openRelease: 'openRelease',
|
|
134
|
+
openDiff: 'openDiff',
|
|
135
|
+
openRepo: 'openRepo',
|
|
136
|
+
githubToken: 'githubToken',
|
|
137
|
+
cacheFile: 'cacheFile',
|
|
138
|
+
cacheExpiration: 'cacheExpiration',
|
|
139
|
+
cacheClear: 'cacheClear',
|
|
140
|
+
filterVersion: 'filterVersion',
|
|
141
|
+
rejectVersion: 'rejectVersion',
|
|
142
|
+
enginesNode: 'enginesNode',
|
|
143
|
+
removeRange: 'removeRange',
|
|
144
|
+
packageFile: 'packageFile',
|
|
145
|
+
packageManager: 'packageManager',
|
|
146
|
+
packageData: 'packageData',
|
|
147
|
+
registryType: 'registryType',
|
|
148
|
+
errorLevel: 'errorLevel',
|
|
149
|
+
configFileName: 'configFileName',
|
|
150
|
+
configFilePath: 'configFilePath',
|
|
151
|
+
mergeConfig: 'mergeConfig',
|
|
152
|
+
doctorInstall: 'doctorInstall',
|
|
153
|
+
doctorTest: 'doctorTest',
|
|
154
|
+
};
|
|
155
|
+
for (const [key, value] of Object.entries(cliOpts)) {
|
|
156
|
+
if (value !== undefined) {
|
|
157
|
+
const mappedKey = cliMapping[key] ?? key;
|
|
158
|
+
merged[mappedKey] = value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Parse numeric options
|
|
162
|
+
merged.concurrency = Number(merged.concurrency) || DEFAULT_OPTIONS.concurrency;
|
|
163
|
+
merged.retry = Number(merged.retry) || DEFAULT_OPTIONS.retry;
|
|
164
|
+
merged.timeout = Number(merged.timeout) || DEFAULT_OPTIONS.timeout;
|
|
165
|
+
merged.cacheExpiration = Number(merged.cacheExpiration) || DEFAULT_OPTIONS.cacheExpiration;
|
|
166
|
+
merged.errorLevel = Number(merged.errorLevel) || DEFAULT_OPTIONS.errorLevel;
|
|
167
|
+
// Resolve format as array
|
|
168
|
+
if (typeof merged.format === 'string') {
|
|
169
|
+
merged.format = merged.format.split(',').map((s) => s.trim());
|
|
170
|
+
}
|
|
171
|
+
if (!Array.isArray(merged.format)) {
|
|
172
|
+
merged.format = [];
|
|
173
|
+
}
|
|
174
|
+
// Set cwd
|
|
175
|
+
if (!merged.cwd) {
|
|
176
|
+
merged.cwd = process.cwd();
|
|
177
|
+
}
|
|
178
|
+
// Verbose alias
|
|
179
|
+
if (merged.verbose) {
|
|
180
|
+
merged.loglevel = 'verbose';
|
|
181
|
+
}
|
|
182
|
+
// Silent alias
|
|
183
|
+
if (merged.silent) {
|
|
184
|
+
merged.loglevel = 'silent';
|
|
185
|
+
}
|
|
186
|
+
// Interactive implies security + inspectDeps enrichment
|
|
187
|
+
if (merged.interactive) {
|
|
188
|
+
merged.security = true;
|
|
189
|
+
merged.inspectDeps = true;
|
|
190
|
+
}
|
|
191
|
+
return merged;
|
|
192
|
+
}
|
|
193
|
+
/** Main CLI entry point */
|
|
194
|
+
async function main() {
|
|
195
|
+
const program = createProgram();
|
|
196
|
+
program.parse();
|
|
197
|
+
const cliOpts = program.opts();
|
|
198
|
+
// Handle stdin
|
|
199
|
+
if (cliOpts.stdin) {
|
|
200
|
+
cliOpts.packageData = readFileSync('/dev/stdin', 'utf-8');
|
|
201
|
+
}
|
|
202
|
+
const options = await loadConfig(cliOpts);
|
|
203
|
+
// Run
|
|
204
|
+
const spinner = options.loglevel !== 'silent' && !options.interactive
|
|
205
|
+
? ora('Checking for updates...').start()
|
|
206
|
+
: null;
|
|
207
|
+
try {
|
|
208
|
+
const results = await checkUpgrades(options);
|
|
209
|
+
spinner?.stop();
|
|
210
|
+
// Aggregate all upgrades
|
|
211
|
+
const allUpgrades = results.flatMap((r) => r.upgrades);
|
|
212
|
+
if (allUpgrades.length === 0 && !options.silent) {
|
|
213
|
+
const isJson = options.jsonAll || options.jsonUpgraded || options.jsonDeps;
|
|
214
|
+
if (isJson) {
|
|
215
|
+
console.log('{}');
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.log(chalk.green('All dependencies match the latest package versions :)'));
|
|
219
|
+
}
|
|
220
|
+
process.exit(options.errorLevel >= 2 ? 0 : 0);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
// Interactive mode
|
|
224
|
+
if (options.interactive) {
|
|
225
|
+
const { selected, cancelled } = await runInteractiveSelect(allUpgrades);
|
|
226
|
+
if (cancelled) {
|
|
227
|
+
console.log(chalk.dim('Cancelled.'));
|
|
228
|
+
process.exit(0);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (selected.length === 0) {
|
|
232
|
+
console.log(chalk.dim('No packages selected.'));
|
|
233
|
+
process.exit(0);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Apply selected upgrades
|
|
237
|
+
if (options.upgrade) {
|
|
238
|
+
for (const result of results) {
|
|
239
|
+
const selectedForFile = selected.filter((s) => result.upgrades.some((u) => u.name === s.name));
|
|
240
|
+
if (selectedForFile.length > 0) {
|
|
241
|
+
await writeUpgrades(result.packageFile, selectedForFile);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
console.log(chalk.green(`\nUpgraded ${selected.length} package(s) in package.json`));
|
|
245
|
+
console.log(chalk.dim(`Run ${options.packageManager} install to install new versions.`));
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Show what would be upgraded
|
|
249
|
+
console.log(formatOutput(selected, options));
|
|
250
|
+
console.log(chalk.dim('\nRun with -u to upgrade package.json'));
|
|
251
|
+
}
|
|
252
|
+
process.exit(0);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
// Inline diff mode
|
|
256
|
+
if (options.diff) {
|
|
257
|
+
console.log(renderAllInlineDiffs(allUpgrades));
|
|
258
|
+
if (!options.upgrade) {
|
|
259
|
+
console.log(chalk.dim('\nRun with -u to upgrade package.json'));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// Standard output
|
|
264
|
+
console.log(formatOutput(allUpgrades, options));
|
|
265
|
+
}
|
|
266
|
+
// Open URLs
|
|
267
|
+
if (options.openRelease) {
|
|
268
|
+
await openUrlsForUpgrades(allUpgrades, 'release');
|
|
269
|
+
}
|
|
270
|
+
if (options.openDiff) {
|
|
271
|
+
await openUrlsForUpgrades(allUpgrades, 'diff');
|
|
272
|
+
}
|
|
273
|
+
if (options.openRepo) {
|
|
274
|
+
await openUrlsForUpgrades(allUpgrades, 'repo');
|
|
275
|
+
}
|
|
276
|
+
// Doctor mode
|
|
277
|
+
if (options.doctor) {
|
|
278
|
+
if (!options.upgrade) {
|
|
279
|
+
console.error(chalk.red('Doctor mode requires --upgrade (-u) flag'));
|
|
280
|
+
process.exit(1);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const doctorResult = await runDoctorMode(allUpgrades, options);
|
|
284
|
+
// Apply only succeeded upgrades
|
|
285
|
+
for (const result of results) {
|
|
286
|
+
const succeededForFile = doctorResult.succeeded.filter((s) => result.upgrades.some((u) => u.name === s.name));
|
|
287
|
+
if (succeededForFile.length > 0) {
|
|
288
|
+
await writeUpgrades(result.packageFile, succeededForFile);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
process.exit(doctorResult.failed.length > 0 ? 1 : 0);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Apply upgrades (non-doctor mode)
|
|
295
|
+
if (options.upgrade) {
|
|
296
|
+
await applyUpgrades(results);
|
|
297
|
+
if (!options.silent && !options.jsonAll && !options.jsonUpgraded && !options.jsonDeps) {
|
|
298
|
+
console.log(chalk.dim(`\nRun ${options.packageManager} install to install new versions.`));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else if (!options.silent &&
|
|
302
|
+
!options.jsonAll &&
|
|
303
|
+
!options.jsonUpgraded &&
|
|
304
|
+
!options.jsonDeps &&
|
|
305
|
+
!options.diff) {
|
|
306
|
+
console.log(chalk.dim('\nRun ruckup -u to upgrade package.json'));
|
|
307
|
+
}
|
|
308
|
+
// Exit code based on error level
|
|
309
|
+
if (options.errorLevel >= 2 && allUpgrades.length > 0) {
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
spinner?.stop();
|
|
315
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
316
|
+
if (options.verbose) {
|
|
317
|
+
console.error(err.stack);
|
|
318
|
+
}
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
main();
|
|
323
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency diff analyzer ā compares dependencies between package versions.
|
|
3
|
+
*/
|
|
4
|
+
import type { DepDiff, NpmPackageMetadata, UpgradeResult } from './types.js';
|
|
5
|
+
/** Compare dependencies between two versions of a package */
|
|
6
|
+
export declare function computeDepDiff(metadata: NpmPackageMetadata, fromVersion: string, toVersion: string): DepDiff;
|
|
7
|
+
/** Enrich upgrade results with dependency diff data */
|
|
8
|
+
export declare function enrichWithDepDiffs(upgrades: UpgradeResult[], metadataMap: Map<string, NpmPackageMetadata>): void;
|
|
9
|
+
//# sourceMappingURL=dep-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-diff.d.ts","sourceRoot":"","sources":["../src/dep-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E,6DAA6D;AAC7D,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAmCT;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAC3C,IAAI,CAiBN"}
|
package/dist/dep-diff.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency diff analyzer ā compares dependencies between package versions.
|
|
3
|
+
*/
|
|
4
|
+
/** Compare dependencies between two versions of a package */
|
|
5
|
+
export function computeDepDiff(metadata, fromVersion, toVersion) {
|
|
6
|
+
const fromMeta = metadata.versions[fromVersion];
|
|
7
|
+
const toMeta = metadata.versions[toVersion];
|
|
8
|
+
const fromDeps = fromMeta?.dependencies ?? {};
|
|
9
|
+
const toDeps = toMeta?.dependencies ?? {};
|
|
10
|
+
const added = {};
|
|
11
|
+
const removed = {};
|
|
12
|
+
const changed = {};
|
|
13
|
+
// Find added and changed
|
|
14
|
+
for (const [name, toVer] of Object.entries(toDeps)) {
|
|
15
|
+
if (!(name in fromDeps)) {
|
|
16
|
+
added[name] = toVer;
|
|
17
|
+
}
|
|
18
|
+
else if (fromDeps[name] !== toVer) {
|
|
19
|
+
changed[name] = { from: fromDeps[name], to: toVer };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Find removed
|
|
23
|
+
for (const [name, fromVer] of Object.entries(fromDeps)) {
|
|
24
|
+
if (!(name in toDeps)) {
|
|
25
|
+
removed[name] = fromVer;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
added,
|
|
30
|
+
removed,
|
|
31
|
+
changed,
|
|
32
|
+
totalAdded: Object.keys(added).length,
|
|
33
|
+
totalRemoved: Object.keys(removed).length,
|
|
34
|
+
totalChanged: Object.keys(changed).length,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Enrich upgrade results with dependency diff data */
|
|
38
|
+
export function enrichWithDepDiffs(upgrades, metadataMap) {
|
|
39
|
+
for (const upgrade of upgrades) {
|
|
40
|
+
const metadata = metadataMap.get(upgrade.name);
|
|
41
|
+
if (!metadata)
|
|
42
|
+
continue;
|
|
43
|
+
// Only compute if both versions exist in metadata
|
|
44
|
+
if (metadata.versions[upgrade.currentVersion] &&
|
|
45
|
+
metadata.versions[upgrade.targetVersion]) {
|
|
46
|
+
upgrade.depDiff = computeDepDiff(metadata, upgrade.currentVersion, upgrade.targetVersion);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dep-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-diff.js","sourceRoot":"","sources":["../src/dep-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAC5B,QAA4B,EAC5B,WAAmB,EACnB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;IAE1C,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAiD,EAAE,CAAC;IAEjE,yBAAyB;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,eAAe;IACf,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,OAAO;QACP,OAAO;QACP,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QACrC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;QACzC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;KAC1C,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,WAA4C;IAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,kDAAkD;QAClD,IACE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;YACzC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EACxC,CAAC;YACD,OAAO,CAAC,OAAO,GAAG,cAAc,CAC9B,QAAQ,EACR,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,aAAa,CACtB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor mode ā iteratively upgrade packages and run tests.
|
|
3
|
+
*/
|
|
4
|
+
import type { UpgradeResult, RuckupOptions } from './types.js';
|
|
5
|
+
interface DoctorResult {
|
|
6
|
+
succeeded: UpgradeResult[];
|
|
7
|
+
failed: UpgradeResult[];
|
|
8
|
+
}
|
|
9
|
+
/** Run doctor mode: upgrade packages one by one, testing after each */
|
|
10
|
+
export declare function runDoctorMode(upgrades: UpgradeResult[], options: RuckupOptions): Promise<DoctorResult>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK/D,UAAU,YAAY;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAwBD,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA0EvB"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor mode ā iteratively upgrade packages and run tests.
|
|
3
|
+
*/
|
|
4
|
+
import { execFile } from 'node:child_process';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { readPackageFile, writeUpgrades } from './package.js';
|
|
8
|
+
const execFileP = promisify(execFile);
|
|
9
|
+
/** Run a shell command and return success/failure */
|
|
10
|
+
async function runCommand(command, cwd) {
|
|
11
|
+
try {
|
|
12
|
+
const [cmd, ...args] = command.split(/\s+/);
|
|
13
|
+
const { stdout, stderr } = await execFileP(cmd, args, {
|
|
14
|
+
cwd,
|
|
15
|
+
timeout: 5 * 60 * 1000, // 5 minutes
|
|
16
|
+
shell: true,
|
|
17
|
+
});
|
|
18
|
+
return { success: true, output: stdout + stderr };
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const error = err;
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
output: (error.stdout ?? '') + (error.stderr ?? '') + (error.message ?? ''),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Run doctor mode: upgrade packages one by one, testing after each */
|
|
29
|
+
export async function runDoctorMode(upgrades, options) {
|
|
30
|
+
const installCmd = options.doctorInstall ?? `${options.packageManager} install`;
|
|
31
|
+
const testCmd = options.doctorTest ?? `${options.packageManager} test`;
|
|
32
|
+
const cwd = options.cwd;
|
|
33
|
+
const succeeded = [];
|
|
34
|
+
const failed = [];
|
|
35
|
+
// Read original package.json for rollback
|
|
36
|
+
const originalPkg = await readPackageFile(`${cwd}/${options.packageFile}`);
|
|
37
|
+
const originalRaw = originalPkg.raw;
|
|
38
|
+
console.log(chalk.bold('\n𩺠Doctor mode: testing upgrades one by one...\n'));
|
|
39
|
+
for (let i = 0; i < upgrades.length; i++) {
|
|
40
|
+
const upgrade = upgrades[i];
|
|
41
|
+
const progress = `[${i + 1}/${upgrades.length}]`;
|
|
42
|
+
process.stdout.write(`${progress} Testing ${chalk.bold(upgrade.name)} ${upgrade.current} ā ${upgrade.target}... `);
|
|
43
|
+
// Apply this single upgrade
|
|
44
|
+
const pkg = await readPackageFile(`${cwd}/${options.packageFile}`);
|
|
45
|
+
await writeUpgrades(pkg, [upgrade]);
|
|
46
|
+
// Install
|
|
47
|
+
const installResult = await runCommand(installCmd, cwd);
|
|
48
|
+
if (!installResult.success) {
|
|
49
|
+
console.log(chalk.red('ā install failed'));
|
|
50
|
+
if (options.verbose) {
|
|
51
|
+
console.log(chalk.dim(installResult.output));
|
|
52
|
+
}
|
|
53
|
+
// Rollback
|
|
54
|
+
await rollback(originalPkg.filePath, originalRaw, succeeded, cwd, options);
|
|
55
|
+
failed.push(upgrade);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Test
|
|
59
|
+
const testResult = await runCommand(testCmd, cwd);
|
|
60
|
+
if (!testResult.success) {
|
|
61
|
+
console.log(chalk.red('ā tests failed'));
|
|
62
|
+
if (options.verbose) {
|
|
63
|
+
console.log(chalk.dim(testResult.output));
|
|
64
|
+
}
|
|
65
|
+
// Rollback this upgrade
|
|
66
|
+
await rollback(originalPkg.filePath, originalRaw, succeeded, cwd, options);
|
|
67
|
+
failed.push(upgrade);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
console.log(chalk.green('ā'));
|
|
71
|
+
succeeded.push(upgrade);
|
|
72
|
+
}
|
|
73
|
+
// Final summary
|
|
74
|
+
console.log(chalk.bold('\n𩺠Doctor Results:'));
|
|
75
|
+
if (succeeded.length > 0) {
|
|
76
|
+
console.log(chalk.green(` ā ${succeeded.length} upgrades passed`));
|
|
77
|
+
for (const u of succeeded) {
|
|
78
|
+
console.log(chalk.green(` ${u.name} ${u.current} ā ${u.target}`));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (failed.length > 0) {
|
|
82
|
+
console.log(chalk.red(` ā ${failed.length} upgrades failed`));
|
|
83
|
+
for (const u of failed) {
|
|
84
|
+
console.log(chalk.red(` ${u.name} ${u.current} ā ${u.target}`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { succeeded, failed };
|
|
88
|
+
}
|
|
89
|
+
/** Rollback to original + already succeeded upgrades */
|
|
90
|
+
async function rollback(filePath, originalRaw, succeeded, cwd, options) {
|
|
91
|
+
const { writeFile } = await import('node:fs/promises');
|
|
92
|
+
await writeFile(filePath, originalRaw, 'utf-8');
|
|
93
|
+
// Re-apply only succeeded upgrades
|
|
94
|
+
if (succeeded.length > 0) {
|
|
95
|
+
const pkg = await readPackageFile(filePath);
|
|
96
|
+
await writeUpgrades(pkg, succeeded);
|
|
97
|
+
}
|
|
98
|
+
// Re-install
|
|
99
|
+
const installCmd = options.doctorInstall ?? `${options.packageManager} install`;
|
|
100
|
+
await runCommand(installCmd, cwd);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ruckup core engine ā wires registry, version resolver, filters, security, and diff together.
|
|
3
|
+
*/
|
|
4
|
+
import type { UpgradeResult, RuckupOptions } from './types.js';
|
|
5
|
+
import { type PackageFile } from './package.js';
|
|
6
|
+
export interface RunResult {
|
|
7
|
+
upgrades: UpgradeResult[];
|
|
8
|
+
packageFile: PackageFile;
|
|
9
|
+
}
|
|
10
|
+
/** Run the core upgrade check for a single package.json */
|
|
11
|
+
export declare function checkUpgrades(options: RuckupOptions): Promise<RunResult[]>;
|
|
12
|
+
/** Apply upgrades to package.json files */
|
|
13
|
+
export declare function applyUpgrades(results: RunResult[]): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAiBtB,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,2DAA2D;AAC3D,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CAmCtB;AAgGD,2CAA2C;AAC3C,wBAAsB,aAAa,CACjC,OAAO,EAAE,SAAS,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CAMf"}
|