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.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/core/Cargo.lock +1093 -0
  4. package/core/Cargo.toml +22 -0
  5. package/core/src/arc_lfu.rs +91 -0
  6. package/core/src/cache.rs +205 -0
  7. package/core/src/lockfiles.rs +112 -0
  8. package/core/src/main.rs +125 -0
  9. package/core/src/ml.rs +188 -0
  10. package/core/src/optimization.rs +314 -0
  11. package/core/src/safety.rs +103 -0
  12. package/core/src/scanner.rs +136 -0
  13. package/core/src/symlink.rs +223 -0
  14. package/core/src/types.rs +87 -0
  15. package/core/src/usage_tracker.rs +107 -0
  16. package/dist/cli/index.d.ts +2 -0
  17. package/dist/cli/index.d.ts.map +1 -0
  18. package/dist/cli/index.js +249 -0
  19. package/dist/cli/index.js.map +1 -0
  20. package/dist/core/bindings.d.ts +33 -0
  21. package/dist/core/bindings.d.ts.map +1 -0
  22. package/dist/core/bindings.js +172 -0
  23. package/dist/core/bindings.js.map +1 -0
  24. package/dist/managers/base-manager.d.ts +33 -0
  25. package/dist/managers/base-manager.d.ts.map +1 -0
  26. package/dist/managers/base-manager.js +122 -0
  27. package/dist/managers/base-manager.js.map +1 -0
  28. package/dist/managers/index.d.ts +12 -0
  29. package/dist/managers/index.d.ts.map +1 -0
  30. package/dist/managers/index.js +37 -0
  31. package/dist/managers/index.js.map +1 -0
  32. package/dist/managers/npm-manager.d.ts +14 -0
  33. package/dist/managers/npm-manager.d.ts.map +1 -0
  34. package/dist/managers/npm-manager.js +128 -0
  35. package/dist/managers/npm-manager.js.map +1 -0
  36. package/dist/managers/pnpm-manager.d.ts +14 -0
  37. package/dist/managers/pnpm-manager.d.ts.map +1 -0
  38. package/dist/managers/pnpm-manager.js +137 -0
  39. package/dist/managers/pnpm-manager.js.map +1 -0
  40. package/dist/managers/yarn-manager.d.ts +14 -0
  41. package/dist/managers/yarn-manager.d.ts.map +1 -0
  42. package/dist/managers/yarn-manager.js +141 -0
  43. package/dist/managers/yarn-manager.js.map +1 -0
  44. package/dist/types/index.d.ts +85 -0
  45. package/dist/types/index.d.ts.map +1 -0
  46. package/dist/types/index.js +13 -0
  47. package/dist/types/index.js.map +1 -0
  48. package/dist/utils/logger.d.ts +18 -0
  49. package/dist/utils/logger.d.ts.map +1 -0
  50. package/dist/utils/logger.js +50 -0
  51. package/dist/utils/logger.js.map +1 -0
  52. package/package.json +64 -0
  53. package/src/cli/index.ts +212 -0
  54. package/src/core/bindings.ts +157 -0
  55. package/src/managers/base-manager.ts +117 -0
  56. package/src/managers/index.ts +32 -0
  57. package/src/managers/npm-manager.ts +96 -0
  58. package/src/managers/pnpm-manager.ts +107 -0
  59. package/src/managers/yarn-manager.ts +112 -0
  60. package/src/types/index.ts +97 -0
  61. package/src/utils/logger.ts +50 -0
  62. 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,iDAAsC;AACtC,2CAA6B;AAC7B,uCAAyB;AACzB,4CAAyC;AACzC,gDAAwB;AAGxB,SAAS,SAAS;IACjB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC5B,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;YAC7C,IAAI,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QAC7C,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,UAAU;IAClB,kBAAkB;IAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,yBAAyB;IACzB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,UAAU;IACV,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC1F,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;AAClH,CAAC;AAED,SAAS,OAAO,CAAC,IAAc;IAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxF,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAuB;IAC1D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,OAAO;QACR,CAAC;QAAC,MAAM,CAAC;YACR,kBAAkB;QACnB,CAAC;IACF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACL,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,mFAAmF,CAAC;KAChG,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,aAAa,EAAE,gBAAgB,EAAE,KAAK,CAAC;KAC9C,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,KAAK,CAAC;KACjD,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,CAAC,CAAC;AAEtE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE;IAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAC7C,IAAI,IAAI,CAAC,OAAO;QAAE,eAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,wBAAwB,EAAE,eAAe,EAAE,EAAE,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,wBAAwB,EAAE,kBAAkB,EAAE,EAAE,CAAC;KACxD,MAAM,CAAC,4BAA4B,EAAE,2BAA2B,EAAE,IAAI,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oFAAoF,CAAC;KACjG,MAAM,CAAC,4BAA4B,EAAE,oCAAoC,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,UAAU,EAAE,qCAAqC,EAAE,KAAK,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9G,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,EAAE,EAAE,CAAC;KACzD,MAAM,CAAC,4BAA4B,EAAE,2BAA2B,EAAE,IAAI,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,EAAE,KAAK,CAAC;KACvE,MAAM,CAAC,aAAa,EAAE,6BAA6B,EAAE,KAAK,CAAC;KAC3D,MAAM,CAAC,4BAA4B,EAAE,+BAA+B,EAAE,MAAM,CAAC;KAC7E,MAAM,CAAC,8BAA8B,EAAE,oCAAoC,EAAE,aAAa,CAAC;KAC3F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG;QACZ,UAAU;QACV,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,WAAW;QACjC,sBAAsB,EAAE,OAAO;KAC/B,CAAC;IAEF,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,wBAAwB,EAAE,kBAAkB,EAAE,EAAE,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -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