packagepurge 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/core/Cargo.lock +1093 -0
- package/core/Cargo.toml +22 -0
- package/core/src/arc_lfu.rs +91 -0
- package/core/src/cache.rs +205 -0
- package/core/src/lockfiles.rs +112 -0
- package/core/src/main.rs +125 -0
- package/core/src/ml.rs +188 -0
- package/core/src/optimization.rs +314 -0
- package/core/src/safety.rs +103 -0
- package/core/src/scanner.rs +136 -0
- package/core/src/symlink.rs +223 -0
- package/core/src/types.rs +87 -0
- package/core/src/usage_tracker.rs +107 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +249 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/bindings.d.ts +33 -0
- package/dist/core/bindings.d.ts.map +1 -0
- package/dist/core/bindings.js +172 -0
- package/dist/core/bindings.js.map +1 -0
- package/dist/managers/base-manager.d.ts +33 -0
- package/dist/managers/base-manager.d.ts.map +1 -0
- package/dist/managers/base-manager.js +122 -0
- package/dist/managers/base-manager.js.map +1 -0
- package/dist/managers/index.d.ts +12 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/managers/index.js +37 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/npm-manager.d.ts +14 -0
- package/dist/managers/npm-manager.d.ts.map +1 -0
- package/dist/managers/npm-manager.js +128 -0
- package/dist/managers/npm-manager.js.map +1 -0
- package/dist/managers/pnpm-manager.d.ts +14 -0
- package/dist/managers/pnpm-manager.d.ts.map +1 -0
- package/dist/managers/pnpm-manager.js +137 -0
- package/dist/managers/pnpm-manager.js.map +1 -0
- package/dist/managers/yarn-manager.d.ts +14 -0
- package/dist/managers/yarn-manager.d.ts.map +1 -0
- package/dist/managers/yarn-manager.js +141 -0
- package/dist/managers/yarn-manager.js.map +1 -0
- package/dist/types/index.d.ts +85 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +64 -0
- package/src/cli/index.ts +212 -0
- package/src/core/bindings.ts +157 -0
- package/src/managers/base-manager.ts +117 -0
- package/src/managers/index.ts +32 -0
- package/src/managers/npm-manager.ts +96 -0
- package/src/managers/pnpm-manager.ts +107 -0
- package/src/managers/yarn-manager.ts +112 -0
- package/src/types/index.ts +97 -0
- package/src/utils/logger.ts +50 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const commander_1 = require("commander");
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const logger_1 = require("../utils/logger");
|
|
44
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
45
|
+
function isWindows() {
|
|
46
|
+
return process.platform === 'win32';
|
|
47
|
+
}
|
|
48
|
+
function fileExists(p) {
|
|
49
|
+
try {
|
|
50
|
+
return fs.existsSync(p);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function resolveFromPATH(name) {
|
|
57
|
+
const exts = isWindows() ? ['.exe', '.cmd', ''] : [''];
|
|
58
|
+
const parts = (process.env.PATH || '').split(path.delimiter);
|
|
59
|
+
for (const dir of parts) {
|
|
60
|
+
for (const ext of exts) {
|
|
61
|
+
const candidate = path.join(dir, name + ext);
|
|
62
|
+
if (fileExists(candidate))
|
|
63
|
+
return candidate;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function coreBinary() {
|
|
69
|
+
// 1) Env override
|
|
70
|
+
const envPath = process.env.PACKAGEPURGE_CORE;
|
|
71
|
+
if (envPath && fileExists(envPath))
|
|
72
|
+
return envPath;
|
|
73
|
+
// 2) Local release/debug
|
|
74
|
+
const exe = isWindows() ? 'packagepurge_core.exe' : 'packagepurge-core';
|
|
75
|
+
const rel = path.join(process.cwd(), 'core', 'target', 'release', exe);
|
|
76
|
+
if (fileExists(rel))
|
|
77
|
+
return rel;
|
|
78
|
+
const dbg = path.join(process.cwd(), 'core', 'target', 'debug', exe);
|
|
79
|
+
if (fileExists(dbg))
|
|
80
|
+
return dbg;
|
|
81
|
+
// 3) PATH
|
|
82
|
+
const fromPath = resolveFromPATH(isWindows() ? 'packagepurge_core' : 'packagepurge-core');
|
|
83
|
+
if (fromPath)
|
|
84
|
+
return fromPath;
|
|
85
|
+
throw new Error('packagepurge-core binary not found. Build with "npm run build:core" or set PACKAGEPURGE_CORE.');
|
|
86
|
+
}
|
|
87
|
+
function runCore(args) {
|
|
88
|
+
return new Promise((resolve, reject) => {
|
|
89
|
+
const bin = coreBinary();
|
|
90
|
+
const child = (0, child_process_1.spawn)(bin, args, { stdio: ['ignore', 'pipe', 'pipe'], env: process.env });
|
|
91
|
+
let out = '';
|
|
92
|
+
let err = '';
|
|
93
|
+
child.stdout.on('data', (d) => out += d.toString());
|
|
94
|
+
child.stderr.on('data', (d) => err += d.toString());
|
|
95
|
+
child.on('error', reject);
|
|
96
|
+
child.on('close', (code) => resolve({ stdout: out, stderr: err, code: code ?? 1 }));
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async function output(data, format) {
|
|
100
|
+
if (format === 'yaml') {
|
|
101
|
+
try {
|
|
102
|
+
const obj = JSON.parse(data);
|
|
103
|
+
console.log(yaml_1.default.stringify(obj));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Fallback to raw
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
console.log(data);
|
|
111
|
+
}
|
|
112
|
+
const program = new commander_1.Command();
|
|
113
|
+
program
|
|
114
|
+
.name('packagepurge')
|
|
115
|
+
.description('Intelligent package manager cache cleanup service with project-aware optimization')
|
|
116
|
+
.version('1.0.0')
|
|
117
|
+
.option('-q, --quiet', 'Minimal output', false)
|
|
118
|
+
.option('-v, --verbose', 'Verbose logging', false)
|
|
119
|
+
.option('-f, --format <format>', 'Output format: json|yaml', 'json');
|
|
120
|
+
program.hook('preAction', (_, actionCommand) => {
|
|
121
|
+
const opts = actionCommand.optsWithGlobals();
|
|
122
|
+
if (opts.verbose)
|
|
123
|
+
logger_1.logger.setLevel(0);
|
|
124
|
+
});
|
|
125
|
+
program
|
|
126
|
+
.command('scan')
|
|
127
|
+
.description('Scan filesystem and output results')
|
|
128
|
+
.option('-p, --paths <paths...>', 'Paths to scan', [])
|
|
129
|
+
.action(async (opts, cmd) => {
|
|
130
|
+
const g = cmd.parent?.opts?.() || {};
|
|
131
|
+
const args = ['scan', ...(opts.paths?.length ? ['--paths', ...opts.paths] : [])];
|
|
132
|
+
const res = await runCore(args);
|
|
133
|
+
if (res.code !== 0) {
|
|
134
|
+
if (!g.quiet)
|
|
135
|
+
logger_1.logger.error(res.stderr || 'Scan failed');
|
|
136
|
+
process.exit(res.code);
|
|
137
|
+
}
|
|
138
|
+
await output(res.stdout, (g.format || 'json'));
|
|
139
|
+
});
|
|
140
|
+
program
|
|
141
|
+
.command('analyze')
|
|
142
|
+
.description('Dry-run cleanup plan (no changes)')
|
|
143
|
+
.option('-p, --paths <paths...>', 'Paths to analyze', [])
|
|
144
|
+
.option('-d, --preserve-days <days>', 'Preserve days for recency', '90')
|
|
145
|
+
.action(async (opts, cmd) => {
|
|
146
|
+
const g = cmd.parent?.opts?.() || {};
|
|
147
|
+
const preserve = String(opts.preserveDays ?? opts['preserve-days'] ?? opts.d ?? 90);
|
|
148
|
+
const args = ['dry-run', '--preserve-days', preserve, ...(opts.paths?.length ? ['--paths', ...opts.paths] : [])];
|
|
149
|
+
const res = await runCore(args);
|
|
150
|
+
if (res.code !== 0) {
|
|
151
|
+
if (!g.quiet)
|
|
152
|
+
logger_1.logger.error(res.stderr || 'Analyze failed');
|
|
153
|
+
process.exit(res.code);
|
|
154
|
+
}
|
|
155
|
+
await output(res.stdout, (g.format || 'json'));
|
|
156
|
+
});
|
|
157
|
+
program
|
|
158
|
+
.command('clean')
|
|
159
|
+
.description('Quarantine targets (Move-and-Delete transaction). Defaults to dry-run via analyze.')
|
|
160
|
+
.option('-t, --targets <targets...>', 'Paths to quarantine (from analyze)')
|
|
161
|
+
.action(async (opts, cmd) => {
|
|
162
|
+
const g = cmd.parent?.opts?.() || {};
|
|
163
|
+
if (!opts.targets || !opts.targets.length) {
|
|
164
|
+
if (!g.quiet)
|
|
165
|
+
logger_1.logger.warn('No targets provided. Run analyze first to produce a plan.');
|
|
166
|
+
process.exit(2);
|
|
167
|
+
}
|
|
168
|
+
const res = await runCore(['quarantine', ...opts.targets]);
|
|
169
|
+
if (res.code !== 0) {
|
|
170
|
+
if (!g.quiet)
|
|
171
|
+
logger_1.logger.error(res.stderr || 'Clean failed');
|
|
172
|
+
process.exit(res.code);
|
|
173
|
+
}
|
|
174
|
+
await output(res.stdout, (g.format || 'json'));
|
|
175
|
+
});
|
|
176
|
+
program
|
|
177
|
+
.command('rollback')
|
|
178
|
+
.description('Rollback quarantine by id or latest')
|
|
179
|
+
.option('--id <id>', 'Quarantine record id')
|
|
180
|
+
.option('--latest', 'Rollback the most recent quarantine', false)
|
|
181
|
+
.action(async (opts, cmd) => {
|
|
182
|
+
const g = cmd.parent?.opts?.() || {};
|
|
183
|
+
const args = ['rollback'];
|
|
184
|
+
const finalArgs = opts.id ? args.concat(['--id', opts.id]) : (opts.latest ? args.concat(['--latest']) : args);
|
|
185
|
+
const res = await runCore(finalArgs);
|
|
186
|
+
if (res.code !== 0) {
|
|
187
|
+
if (!g.quiet)
|
|
188
|
+
logger_1.logger.error(res.stderr || 'Rollback failed');
|
|
189
|
+
process.exit(res.code);
|
|
190
|
+
}
|
|
191
|
+
await output(res.stdout, (g.format || 'json'));
|
|
192
|
+
});
|
|
193
|
+
program
|
|
194
|
+
.command('optimize')
|
|
195
|
+
.description('Optimize with ML/LRU prediction and symlinking (dry run)')
|
|
196
|
+
.option('-p, --paths <paths...>', 'Paths to optimize', [])
|
|
197
|
+
.option('-d, --preserve-days <days>', 'Days to preserve packages', '90')
|
|
198
|
+
.option('--enable-symlinking', 'Enable cross-project symlinking', false)
|
|
199
|
+
.option('--enable-ml', 'Enable ML-based predictions', false)
|
|
200
|
+
.option('--lru-max-packages <count>', 'Maximum packages in LRU cache', '1000')
|
|
201
|
+
.option('--lru-max-size-bytes <bytes>', 'Maximum size of LRU cache in bytes', '10000000000')
|
|
202
|
+
.action(async (opts, cmd) => {
|
|
203
|
+
const g = cmd.parent?.opts?.() || {};
|
|
204
|
+
const preserve = String(opts.preserveDays ?? opts['preserve-days'] ?? opts.d ?? 90);
|
|
205
|
+
const lruPackages = String(opts.lruMaxPackages ?? opts['lru-max-packages'] ?? 1000);
|
|
206
|
+
const lruSize = String(opts.lruMaxSizeBytes ?? opts['lru-max-size-bytes'] ?? 10000000000);
|
|
207
|
+
const args = [
|
|
208
|
+
'optimize',
|
|
209
|
+
'--preserve-days', preserve,
|
|
210
|
+
'--lru-max-packages', lruPackages,
|
|
211
|
+
'--lru-max-size-bytes', lruSize,
|
|
212
|
+
];
|
|
213
|
+
if (opts.enableSymlinking || opts['enable-symlinking']) {
|
|
214
|
+
args.push('--enable-symlinking');
|
|
215
|
+
}
|
|
216
|
+
if (opts.enableMl || opts['enable-ml']) {
|
|
217
|
+
args.push('--enable-ml');
|
|
218
|
+
}
|
|
219
|
+
if (opts.paths?.length) {
|
|
220
|
+
args.push('--paths', ...opts.paths);
|
|
221
|
+
}
|
|
222
|
+
const res = await runCore(args);
|
|
223
|
+
if (res.code !== 0) {
|
|
224
|
+
if (!g.quiet)
|
|
225
|
+
logger_1.logger.error(res.stderr || 'Optimize failed');
|
|
226
|
+
process.exit(res.code);
|
|
227
|
+
}
|
|
228
|
+
await output(res.stdout, (g.format || 'json'));
|
|
229
|
+
});
|
|
230
|
+
program
|
|
231
|
+
.command('symlink')
|
|
232
|
+
.description('Execute symlinking for duplicate packages across projects')
|
|
233
|
+
.option('-p, --paths <paths...>', 'Paths to process', [])
|
|
234
|
+
.action(async (opts, cmd) => {
|
|
235
|
+
const g = cmd.parent?.opts?.() || {};
|
|
236
|
+
const args = ['symlink'];
|
|
237
|
+
if (opts.paths?.length) {
|
|
238
|
+
args.push('--paths', ...opts.paths);
|
|
239
|
+
}
|
|
240
|
+
const res = await runCore(args);
|
|
241
|
+
if (res.code !== 0) {
|
|
242
|
+
if (!g.quiet)
|
|
243
|
+
logger_1.logger.error(res.stderr || 'Symlink failed');
|
|
244
|
+
process.exit(res.code);
|
|
245
|
+
}
|
|
246
|
+
await output(res.stdout, (g.format || 'json'));
|
|
247
|
+
});
|
|
248
|
+
program.parse(process.argv);
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript bindings for Rust core functionality
|
|
3
|
+
* Provides type-safe interfaces to the Rust binary
|
|
4
|
+
*/
|
|
5
|
+
import { OptimizeResult, SymlinkResult } from '../types';
|
|
6
|
+
export interface OptimizeOptions {
|
|
7
|
+
paths?: string[];
|
|
8
|
+
preserveDays?: number;
|
|
9
|
+
enableSymlinking?: boolean;
|
|
10
|
+
enableML?: boolean;
|
|
11
|
+
lruMaxPackages?: number;
|
|
12
|
+
lruMaxSizeBytes?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SymlinkOptions {
|
|
15
|
+
paths?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Optimize packages with ML/LRU prediction and symlinking
|
|
19
|
+
*/
|
|
20
|
+
export declare function optimize(options?: OptimizeOptions): Promise<OptimizeResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Execute symlinking for duplicate packages
|
|
23
|
+
*/
|
|
24
|
+
export declare function executeSymlinking(options?: SymlinkOptions): Promise<SymlinkResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Scan filesystem for packages and projects
|
|
27
|
+
*/
|
|
28
|
+
export declare function scan(paths?: string[]): Promise<any>;
|
|
29
|
+
/**
|
|
30
|
+
* Analyze (dry run) cleanup plan
|
|
31
|
+
*/
|
|
32
|
+
export declare function analyze(paths?: string[], preserveDays?: number): Promise<any>;
|
|
33
|
+
//# sourceMappingURL=bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/core/bindings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmDzD,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4BrF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAa5F;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAY7D;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,KAAK,GAAE,MAAM,EAAO,EAAE,YAAY,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAY3F"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript bindings for Rust core functionality
|
|
4
|
+
* Provides type-safe interfaces to the Rust binary
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.optimize = optimize;
|
|
41
|
+
exports.executeSymlinking = executeSymlinking;
|
|
42
|
+
exports.scan = scan;
|
|
43
|
+
exports.analyze = analyze;
|
|
44
|
+
const child_process_1 = require("child_process");
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
function isWindows() {
|
|
48
|
+
return process.platform === 'win32';
|
|
49
|
+
}
|
|
50
|
+
function fileExists(p) {
|
|
51
|
+
try {
|
|
52
|
+
return fs.existsSync(p);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function resolveFromPATH(name) {
|
|
59
|
+
const exts = isWindows() ? ['.exe', '.cmd', ''] : [''];
|
|
60
|
+
const parts = (process.env.PATH || '').split(path.delimiter);
|
|
61
|
+
for (const dir of parts) {
|
|
62
|
+
for (const ext of exts) {
|
|
63
|
+
const candidate = path.join(dir, name + ext);
|
|
64
|
+
if (fileExists(candidate))
|
|
65
|
+
return candidate;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
function coreBinary() {
|
|
71
|
+
// 1) Env override
|
|
72
|
+
const envPath = process.env.PACKAGEPURGE_CORE;
|
|
73
|
+
if (envPath && fileExists(envPath))
|
|
74
|
+
return envPath;
|
|
75
|
+
// 2) Local release/debug
|
|
76
|
+
const exe = isWindows() ? 'packagepurge_core.exe' : 'packagepurge-core';
|
|
77
|
+
const rel = path.join(process.cwd(), 'core', 'target', 'release', exe);
|
|
78
|
+
if (fileExists(rel))
|
|
79
|
+
return rel;
|
|
80
|
+
const dbg = path.join(process.cwd(), 'core', 'target', 'debug', exe);
|
|
81
|
+
if (fileExists(dbg))
|
|
82
|
+
return dbg;
|
|
83
|
+
// 3) PATH
|
|
84
|
+
const fromPath = resolveFromPATH(isWindows() ? 'packagepurge_core' : 'packagepurge-core');
|
|
85
|
+
if (fromPath)
|
|
86
|
+
return fromPath;
|
|
87
|
+
throw new Error('packagepurge-core binary not found. Build with "npm run build:core" or set PACKAGEPURGE_CORE.');
|
|
88
|
+
}
|
|
89
|
+
function runCore(args) {
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
const bin = coreBinary();
|
|
92
|
+
const child = (0, child_process_1.spawn)(bin, args, { stdio: ['ignore', 'pipe', 'pipe'], env: process.env });
|
|
93
|
+
let out = '';
|
|
94
|
+
let err = '';
|
|
95
|
+
child.stdout.on('data', (d) => out += d.toString());
|
|
96
|
+
child.stderr.on('data', (d) => err += d.toString());
|
|
97
|
+
child.on('error', reject);
|
|
98
|
+
child.on('close', (code) => resolve({ stdout: out, stderr: err, code: code ?? 1 }));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Optimize packages with ML/LRU prediction and symlinking
|
|
103
|
+
*/
|
|
104
|
+
async function optimize(options = {}) {
|
|
105
|
+
const args = ['optimize'];
|
|
106
|
+
if (options.preserveDays !== undefined) {
|
|
107
|
+
args.push('--preserve-days', String(options.preserveDays));
|
|
108
|
+
}
|
|
109
|
+
if (options.enableSymlinking) {
|
|
110
|
+
args.push('--enable-symlinking');
|
|
111
|
+
}
|
|
112
|
+
if (options.enableML) {
|
|
113
|
+
args.push('--enable-ml');
|
|
114
|
+
}
|
|
115
|
+
if (options.lruMaxPackages !== undefined) {
|
|
116
|
+
args.push('--lru-max-packages', String(options.lruMaxPackages));
|
|
117
|
+
}
|
|
118
|
+
if (options.lruMaxSizeBytes !== undefined) {
|
|
119
|
+
args.push('--lru-max-size-bytes', String(options.lruMaxSizeBytes));
|
|
120
|
+
}
|
|
121
|
+
if (options.paths && options.paths.length > 0) {
|
|
122
|
+
args.push('--paths', ...options.paths);
|
|
123
|
+
}
|
|
124
|
+
const res = await runCore(args);
|
|
125
|
+
if (res.code !== 0) {
|
|
126
|
+
throw new Error(`Optimize failed: ${res.stderr || 'Unknown error'}`);
|
|
127
|
+
}
|
|
128
|
+
return JSON.parse(res.stdout);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Execute symlinking for duplicate packages
|
|
132
|
+
*/
|
|
133
|
+
async function executeSymlinking(options = {}) {
|
|
134
|
+
const args = ['symlink'];
|
|
135
|
+
if (options.paths && options.paths.length > 0) {
|
|
136
|
+
args.push('--paths', ...options.paths);
|
|
137
|
+
}
|
|
138
|
+
const res = await runCore(args);
|
|
139
|
+
if (res.code !== 0) {
|
|
140
|
+
throw new Error(`Symlink failed: ${res.stderr || 'Unknown error'}`);
|
|
141
|
+
}
|
|
142
|
+
return JSON.parse(res.stdout);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Scan filesystem for packages and projects
|
|
146
|
+
*/
|
|
147
|
+
async function scan(paths = []) {
|
|
148
|
+
const args = ['scan'];
|
|
149
|
+
if (paths.length > 0) {
|
|
150
|
+
args.push('--paths', ...paths);
|
|
151
|
+
}
|
|
152
|
+
const res = await runCore(args);
|
|
153
|
+
if (res.code !== 0) {
|
|
154
|
+
throw new Error(`Scan failed: ${res.stderr || 'Unknown error'}`);
|
|
155
|
+
}
|
|
156
|
+
return JSON.parse(res.stdout);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Analyze (dry run) cleanup plan
|
|
160
|
+
*/
|
|
161
|
+
async function analyze(paths = [], preserveDays = 90) {
|
|
162
|
+
const args = ['dry-run', '--preserve-days', String(preserveDays)];
|
|
163
|
+
if (paths.length > 0) {
|
|
164
|
+
args.push('--paths', ...paths);
|
|
165
|
+
}
|
|
166
|
+
const res = await runCore(args);
|
|
167
|
+
if (res.code !== 0) {
|
|
168
|
+
throw new Error(`Analyze failed: ${res.stderr || 'Unknown error'}`);
|
|
169
|
+
}
|
|
170
|
+
return JSON.parse(res.stdout);
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/core/bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for package manager integrations
|
|
3
|
+
*/
|
|
4
|
+
import { PackageManager, PackageInfo, ProjectInfo } from '../types';
|
|
5
|
+
export declare abstract class BasePackageManager {
|
|
6
|
+
abstract readonly manager: PackageManager;
|
|
7
|
+
abstract readonly lockFileName: string;
|
|
8
|
+
/**
|
|
9
|
+
* Get the cache directory path for this manager
|
|
10
|
+
*/
|
|
11
|
+
abstract getCachePath(): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Parse lock file to extract dependency information
|
|
14
|
+
*/
|
|
15
|
+
abstract parseLockFile(lockFilePath: string): Promise<Map<string, string>>;
|
|
16
|
+
/**
|
|
17
|
+
* Scan for all packages in cache
|
|
18
|
+
*/
|
|
19
|
+
scanPackages(): Promise<PackageInfo[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Analyze a single package directory
|
|
22
|
+
*/
|
|
23
|
+
protected abstract analyzePackage(packagePath: string): Promise<PackageInfo | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Find all projects using this manager
|
|
26
|
+
*/
|
|
27
|
+
findProjects(rootDir?: string): Promise<ProjectInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Get package version from directory name or package.json
|
|
30
|
+
*/
|
|
31
|
+
protected getPackageVersion(packagePath: string): Promise<string | null>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=base-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-manager.d.ts","sourceRoot":"","sources":["../../src/managers/base-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIpE,8BAAsB,kBAAkB;IACtC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAwB5C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAEnF;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4C3E;;OAEG;cACa,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAY/E"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BasePackageManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class BasePackageManager {
|
|
40
|
+
/**
|
|
41
|
+
* Scan for all packages in cache
|
|
42
|
+
*/
|
|
43
|
+
async scanPackages() {
|
|
44
|
+
const cachePath = await this.getCachePath();
|
|
45
|
+
if (!(await fs.pathExists(cachePath))) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const packages = [];
|
|
49
|
+
const entries = await fs.readdir(cachePath);
|
|
50
|
+
for (const entry of entries) {
|
|
51
|
+
const entryPath = path.join(cachePath, entry);
|
|
52
|
+
const stat = await fs.stat(entryPath);
|
|
53
|
+
if (stat.isDirectory()) {
|
|
54
|
+
const packageInfo = await this.analyzePackage(entryPath);
|
|
55
|
+
if (packageInfo) {
|
|
56
|
+
packages.push(packageInfo);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return packages;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Find all projects using this manager
|
|
64
|
+
*/
|
|
65
|
+
async findProjects(rootDir = process.cwd()) {
|
|
66
|
+
const projects = [];
|
|
67
|
+
const lockFilePattern = this.lockFileName;
|
|
68
|
+
const searchDir = async (dir, depth = 0) => {
|
|
69
|
+
if (depth > 10)
|
|
70
|
+
return; // Limit depth to prevent infinite recursion
|
|
71
|
+
try {
|
|
72
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
73
|
+
const entryNames = entries.map(e => e.name);
|
|
74
|
+
const hasLockFile = entryNames.includes(lockFilePattern);
|
|
75
|
+
const hasPackageJson = entryNames.includes('package.json');
|
|
76
|
+
if (hasLockFile && hasPackageJson) {
|
|
77
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
78
|
+
const lockFilePath = path.join(dir, lockFilePattern);
|
|
79
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
80
|
+
const dependencies = await this.parseLockFile(lockFilePath);
|
|
81
|
+
const stat = await fs.stat(packageJsonPath);
|
|
82
|
+
projects.push({
|
|
83
|
+
path: dir,
|
|
84
|
+
manager: this.manager,
|
|
85
|
+
dependencies,
|
|
86
|
+
lastModified: stat.mtime,
|
|
87
|
+
lockFilePath,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Recursively search subdirectories
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
|
|
93
|
+
await searchDir(path.join(dir, entry.name), depth + 1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Skip directories we can't read
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
await searchDir(rootDir);
|
|
102
|
+
return projects;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get package version from directory name or package.json
|
|
106
|
+
*/
|
|
107
|
+
async getPackageVersion(packagePath) {
|
|
108
|
+
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
109
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
112
|
+
return packageJson.version || null;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.BasePackageManager = BasePackageManager;
|
|
122
|
+
//# sourceMappingURL=base-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-manager.js","sourceRoot":"","sources":["../../src/managers/base-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package manager factory and exports
|
|
3
|
+
*/
|
|
4
|
+
import { BasePackageManager } from './base-manager';
|
|
5
|
+
import { NpmManager } from './npm-manager';
|
|
6
|
+
import { YarnManager } from './yarn-manager';
|
|
7
|
+
import { PnpmManager } from './pnpm-manager';
|
|
8
|
+
import { PackageManager } from '../types';
|
|
9
|
+
export { BasePackageManager, NpmManager, YarnManager, PnpmManager };
|
|
10
|
+
export declare function getManager(manager: PackageManager): BasePackageManager;
|
|
11
|
+
export declare function getAllManagers(): BasePackageManager[];
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|