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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAEpE,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAWtE;AAED,wBAAgB,cAAc,IAAI,kBAAkB,EAAE,CAMrD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PnpmManager = exports.YarnManager = exports.NpmManager = exports.BasePackageManager = void 0;
|
|
4
|
+
exports.getManager = getManager;
|
|
5
|
+
exports.getAllManagers = getAllManagers;
|
|
6
|
+
/**
|
|
7
|
+
* Package manager factory and exports
|
|
8
|
+
*/
|
|
9
|
+
const base_manager_1 = require("./base-manager");
|
|
10
|
+
Object.defineProperty(exports, "BasePackageManager", { enumerable: true, get: function () { return base_manager_1.BasePackageManager; } });
|
|
11
|
+
const npm_manager_1 = require("./npm-manager");
|
|
12
|
+
Object.defineProperty(exports, "NpmManager", { enumerable: true, get: function () { return npm_manager_1.NpmManager; } });
|
|
13
|
+
const yarn_manager_1 = require("./yarn-manager");
|
|
14
|
+
Object.defineProperty(exports, "YarnManager", { enumerable: true, get: function () { return yarn_manager_1.YarnManager; } });
|
|
15
|
+
const pnpm_manager_1 = require("./pnpm-manager");
|
|
16
|
+
Object.defineProperty(exports, "PnpmManager", { enumerable: true, get: function () { return pnpm_manager_1.PnpmManager; } });
|
|
17
|
+
const types_1 = require("../types");
|
|
18
|
+
function getManager(manager) {
|
|
19
|
+
switch (manager) {
|
|
20
|
+
case types_1.PackageManager.NPM:
|
|
21
|
+
return new npm_manager_1.NpmManager();
|
|
22
|
+
case types_1.PackageManager.YARN:
|
|
23
|
+
return new yarn_manager_1.YarnManager();
|
|
24
|
+
case types_1.PackageManager.PNPM:
|
|
25
|
+
return new pnpm_manager_1.PnpmManager();
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`Unsupported package manager: ${manager}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function getAllManagers() {
|
|
31
|
+
return [
|
|
32
|
+
new npm_manager_1.NpmManager(),
|
|
33
|
+
new yarn_manager_1.YarnManager(),
|
|
34
|
+
new pnpm_manager_1.PnpmManager(),
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":";;;AAWA,gCAWC;AAED,wCAMC;AA9BD;;GAEG;AACH,iDAAoD;AAM3C,mGANA,iCAAkB,OAMA;AAL3B,+CAA2C;AAKd,2FALpB,wBAAU,OAKoB;AAJvC,iDAA6C;AAIJ,4FAJhC,0BAAW,OAIgC;AAHpD,iDAA6C;AAGS,4FAH7C,0BAAW,OAG6C;AAFjE,oCAA0C;AAI1C,SAAgB,UAAU,CAAC,OAAuB;IAChD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,sBAAc,CAAC,GAAG;YACrB,OAAO,IAAI,wBAAU,EAAE,CAAC;QAC1B,KAAK,sBAAc,CAAC,IAAI;YACtB,OAAO,IAAI,0BAAW,EAAE,CAAC;QAC3B,KAAK,sBAAc,CAAC,IAAI;YACtB,OAAO,IAAI,0BAAW,EAAE,CAAC;QAC3B;YACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO;QACL,IAAI,wBAAU,EAAE;QAChB,IAAI,0BAAW,EAAE;QACjB,IAAI,0BAAW,EAAE;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* npm package manager integration
|
|
3
|
+
*/
|
|
4
|
+
import { BasePackageManager } from './base-manager';
|
|
5
|
+
import { PackageManager, PackageInfo } from '../types';
|
|
6
|
+
export declare class NpmManager extends BasePackageManager {
|
|
7
|
+
readonly manager = PackageManager.NPM;
|
|
8
|
+
readonly lockFileName = "package-lock.json";
|
|
9
|
+
getCachePath(): Promise<string>;
|
|
10
|
+
parseLockFile(lockFilePath: string): Promise<Map<string, string>>;
|
|
11
|
+
protected analyzePackage(packagePath: string): Promise<PackageInfo | null>;
|
|
12
|
+
private calculateDirectorySize;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=npm-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-manager.d.ts","sourceRoot":"","sources":["../../src/managers/npm-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvD,qBAAa,UAAW,SAAQ,kBAAkB;IAChD,QAAQ,CAAC,OAAO,sBAAsB;IACtC,QAAQ,CAAC,YAAY,uBAAuB;IAEtC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ/B,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;cA6BvD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YA0BlE,sBAAsB;CAkBrC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
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.NpmManager = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* npm package manager integration
|
|
39
|
+
*/
|
|
40
|
+
const base_manager_1 = require("./base-manager");
|
|
41
|
+
const types_1 = require("../types");
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs-extra"));
|
|
45
|
+
class NpmManager extends base_manager_1.BasePackageManager {
|
|
46
|
+
constructor() {
|
|
47
|
+
super(...arguments);
|
|
48
|
+
this.manager = types_1.PackageManager.NPM;
|
|
49
|
+
this.lockFileName = 'package-lock.json';
|
|
50
|
+
}
|
|
51
|
+
async getCachePath() {
|
|
52
|
+
// npm cache path: ~/.npm on Unix, %AppData%/npm-cache on Windows
|
|
53
|
+
if (process.platform === 'win32') {
|
|
54
|
+
return path.join(os.homedir(), 'AppData', 'Roaming', 'npm-cache');
|
|
55
|
+
}
|
|
56
|
+
return path.join(os.homedir(), '.npm');
|
|
57
|
+
}
|
|
58
|
+
async parseLockFile(lockFilePath) {
|
|
59
|
+
const dependencies = new Map();
|
|
60
|
+
try {
|
|
61
|
+
const lockFile = await fs.readJson(lockFilePath);
|
|
62
|
+
// Parse package-lock.json structure
|
|
63
|
+
function extractDependencies(obj, prefix = '') {
|
|
64
|
+
if (obj.dependencies) {
|
|
65
|
+
for (const [name, dep] of Object.entries(obj.dependencies)) {
|
|
66
|
+
const fullName = prefix ? `${prefix}/${name}` : name;
|
|
67
|
+
if (dep.version) {
|
|
68
|
+
dependencies.set(fullName, dep.version);
|
|
69
|
+
}
|
|
70
|
+
if (dep.dependencies) {
|
|
71
|
+
extractDependencies(dep, fullName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
extractDependencies(lockFile);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// If lock file parsing fails, return empty map
|
|
80
|
+
}
|
|
81
|
+
return dependencies;
|
|
82
|
+
}
|
|
83
|
+
async analyzePackage(packagePath) {
|
|
84
|
+
try {
|
|
85
|
+
const stat = await fs.stat(packagePath);
|
|
86
|
+
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
87
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
91
|
+
const size = await this.calculateDirectorySize(packagePath);
|
|
92
|
+
return {
|
|
93
|
+
name: packageJson.name || path.basename(packagePath),
|
|
94
|
+
version: packageJson.version || 'unknown',
|
|
95
|
+
path: packagePath,
|
|
96
|
+
lastAccessed: stat.atime,
|
|
97
|
+
size,
|
|
98
|
+
manager: this.manager,
|
|
99
|
+
projectPaths: [],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async calculateDirectorySize(dirPath) {
|
|
107
|
+
let size = 0;
|
|
108
|
+
try {
|
|
109
|
+
const entries = await fs.readdir(dirPath);
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
const entryPath = path.join(dirPath, entry);
|
|
112
|
+
const stat = await fs.stat(entryPath);
|
|
113
|
+
if (stat.isDirectory()) {
|
|
114
|
+
size += await this.calculateDirectorySize(entryPath);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
size += stat.size;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Ignore errors
|
|
123
|
+
}
|
|
124
|
+
return size;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.NpmManager = NpmManager;
|
|
128
|
+
//# sourceMappingURL=npm-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-manager.js","sourceRoot":"","sources":["../../src/managers/npm-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pnpm package manager integration
|
|
3
|
+
*/
|
|
4
|
+
import { BasePackageManager } from './base-manager';
|
|
5
|
+
import { PackageManager, PackageInfo } from '../types';
|
|
6
|
+
export declare class PnpmManager extends BasePackageManager {
|
|
7
|
+
readonly manager = PackageManager.PNPM;
|
|
8
|
+
readonly lockFileName = "pnpm-lock.yaml";
|
|
9
|
+
getCachePath(): Promise<string>;
|
|
10
|
+
parseLockFile(lockFilePath: string): Promise<Map<string, string>>;
|
|
11
|
+
protected analyzePackage(packagePath: string): Promise<PackageInfo | null>;
|
|
12
|
+
private calculateDirectorySize;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=pnpm-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-manager.d.ts","sourceRoot":"","sources":["../../src/managers/pnpm-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvD,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,OAAO,uBAAuB;IACvC,QAAQ,CAAC,YAAY,oBAAoB;IAEnC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ/B,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;cAwCvD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YA0BlE,sBAAsB;CAkBrC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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.PnpmManager = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* pnpm package manager integration
|
|
39
|
+
*/
|
|
40
|
+
const base_manager_1 = require("./base-manager");
|
|
41
|
+
const types_1 = require("../types");
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs-extra"));
|
|
45
|
+
class PnpmManager extends base_manager_1.BasePackageManager {
|
|
46
|
+
constructor() {
|
|
47
|
+
super(...arguments);
|
|
48
|
+
this.manager = types_1.PackageManager.PNPM;
|
|
49
|
+
this.lockFileName = 'pnpm-lock.yaml';
|
|
50
|
+
}
|
|
51
|
+
async getCachePath() {
|
|
52
|
+
// pnpm store path: ~/.pnpm-store on Unix, %LOCALAPPDATA%/pnpm/store on Windows
|
|
53
|
+
if (process.platform === 'win32') {
|
|
54
|
+
return path.join(os.homedir(), 'AppData', 'Local', 'pnpm', 'store');
|
|
55
|
+
}
|
|
56
|
+
return path.join(os.homedir(), '.pnpm-store');
|
|
57
|
+
}
|
|
58
|
+
async parseLockFile(lockFilePath) {
|
|
59
|
+
const dependencies = new Map();
|
|
60
|
+
try {
|
|
61
|
+
const lockFileContent = await fs.readFile(lockFilePath, 'utf-8');
|
|
62
|
+
// Parse pnpm-lock.yaml format (YAML)
|
|
63
|
+
const lines = lockFileContent.split('\n');
|
|
64
|
+
let currentPackage = null;
|
|
65
|
+
let currentVersion = null;
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
// Package entry: "package-name:"
|
|
69
|
+
if (trimmed.endsWith(':') && !trimmed.startsWith(' ') && !trimmed.startsWith('#')) {
|
|
70
|
+
const match = trimmed.match(/^(.+?):$/);
|
|
71
|
+
if (match && !match[1].startsWith('lockfile')) {
|
|
72
|
+
currentPackage = match[1];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Version field
|
|
76
|
+
if (trimmed.startsWith('version:') && currentPackage) {
|
|
77
|
+
const match = trimmed.match(/version:\s*(.+?)$/);
|
|
78
|
+
if (match) {
|
|
79
|
+
currentVersion = match[1].replace(/["']/g, '');
|
|
80
|
+
dependencies.set(currentPackage, currentVersion);
|
|
81
|
+
currentPackage = null;
|
|
82
|
+
currentVersion = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// If lock file parsing fails, return empty map
|
|
89
|
+
}
|
|
90
|
+
return dependencies;
|
|
91
|
+
}
|
|
92
|
+
async analyzePackage(packagePath) {
|
|
93
|
+
try {
|
|
94
|
+
const stat = await fs.stat(packagePath);
|
|
95
|
+
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
96
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
100
|
+
const size = await this.calculateDirectorySize(packagePath);
|
|
101
|
+
return {
|
|
102
|
+
name: packageJson.name || path.basename(packagePath),
|
|
103
|
+
version: packageJson.version || 'unknown',
|
|
104
|
+
path: packagePath,
|
|
105
|
+
lastAccessed: stat.atime,
|
|
106
|
+
size,
|
|
107
|
+
manager: this.manager,
|
|
108
|
+
projectPaths: [],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async calculateDirectorySize(dirPath) {
|
|
116
|
+
let size = 0;
|
|
117
|
+
try {
|
|
118
|
+
const entries = await fs.readdir(dirPath);
|
|
119
|
+
for (const entry of entries) {
|
|
120
|
+
const entryPath = path.join(dirPath, entry);
|
|
121
|
+
const stat = await fs.stat(entryPath);
|
|
122
|
+
if (stat.isDirectory()) {
|
|
123
|
+
size += await this.calculateDirectorySize(entryPath);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
size += stat.size;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Ignore errors
|
|
132
|
+
}
|
|
133
|
+
return size;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.PnpmManager = PnpmManager;
|
|
137
|
+
//# sourceMappingURL=pnpm-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-manager.js","sourceRoot":"","sources":["../../src/managers/pnpm-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* yarn package manager integration
|
|
3
|
+
*/
|
|
4
|
+
import { BasePackageManager } from './base-manager';
|
|
5
|
+
import { PackageManager, PackageInfo } from '../types';
|
|
6
|
+
export declare class YarnManager extends BasePackageManager {
|
|
7
|
+
readonly manager = PackageManager.YARN;
|
|
8
|
+
readonly lockFileName = "yarn.lock";
|
|
9
|
+
getCachePath(): Promise<string>;
|
|
10
|
+
parseLockFile(lockFilePath: string): Promise<Map<string, string>>;
|
|
11
|
+
protected analyzePackage(packagePath: string): Promise<PackageInfo | null>;
|
|
12
|
+
private calculateDirectorySize;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=yarn-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yarn-manager.d.ts","sourceRoot":"","sources":["../../src/managers/yarn-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvD,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,OAAO,uBAAuB;IACvC,QAAQ,CAAC,YAAY,eAAe;IAE9B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ/B,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;cA6CvD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YA0BlE,sBAAsB;CAkBrC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
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.YarnManager = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* yarn package manager integration
|
|
39
|
+
*/
|
|
40
|
+
const base_manager_1 = require("./base-manager");
|
|
41
|
+
const types_1 = require("../types");
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs-extra"));
|
|
45
|
+
class YarnManager extends base_manager_1.BasePackageManager {
|
|
46
|
+
constructor() {
|
|
47
|
+
super(...arguments);
|
|
48
|
+
this.manager = types_1.PackageManager.YARN;
|
|
49
|
+
this.lockFileName = 'yarn.lock';
|
|
50
|
+
}
|
|
51
|
+
async getCachePath() {
|
|
52
|
+
// yarn cache path: ~/.yarn/cache on Unix, %LOCALAPPDATA%/Yarn/Cache on Windows
|
|
53
|
+
if (process.platform === 'win32') {
|
|
54
|
+
return path.join(os.homedir(), 'AppData', 'Local', 'Yarn', 'Cache');
|
|
55
|
+
}
|
|
56
|
+
return path.join(os.homedir(), '.yarn', 'cache');
|
|
57
|
+
}
|
|
58
|
+
async parseLockFile(lockFilePath) {
|
|
59
|
+
const dependencies = new Map();
|
|
60
|
+
try {
|
|
61
|
+
const lockFileContent = await fs.readFile(lockFilePath, 'utf-8');
|
|
62
|
+
// Parse yarn.lock format (YAML-like format)
|
|
63
|
+
const lines = lockFileContent.split('\n');
|
|
64
|
+
let currentPackage = null;
|
|
65
|
+
let currentVersion = null;
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
// Package declaration: "package-name@version:"
|
|
69
|
+
if (trimmed.endsWith(':') && !trimmed.startsWith(' ')) {
|
|
70
|
+
const match = trimmed.match(/^"?(.+?)@(.+?)"?:$/);
|
|
71
|
+
if (match) {
|
|
72
|
+
currentPackage = match[1];
|
|
73
|
+
currentVersion = match[2];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Version field
|
|
77
|
+
if (trimmed.startsWith('version') && currentPackage) {
|
|
78
|
+
const match = trimmed.match(/version\s+"?(.+?)"?$/);
|
|
79
|
+
if (match) {
|
|
80
|
+
currentVersion = match[1];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Store dependency
|
|
84
|
+
if (currentPackage && currentVersion && trimmed.startsWith('resolved')) {
|
|
85
|
+
dependencies.set(currentPackage, currentVersion);
|
|
86
|
+
currentPackage = null;
|
|
87
|
+
currentVersion = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// If lock file parsing fails, return empty map
|
|
93
|
+
}
|
|
94
|
+
return dependencies;
|
|
95
|
+
}
|
|
96
|
+
async analyzePackage(packagePath) {
|
|
97
|
+
try {
|
|
98
|
+
const stat = await fs.stat(packagePath);
|
|
99
|
+
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
100
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
104
|
+
const size = await this.calculateDirectorySize(packagePath);
|
|
105
|
+
return {
|
|
106
|
+
name: packageJson.name || path.basename(packagePath),
|
|
107
|
+
version: packageJson.version || 'unknown',
|
|
108
|
+
path: packagePath,
|
|
109
|
+
lastAccessed: stat.atime,
|
|
110
|
+
size,
|
|
111
|
+
manager: this.manager,
|
|
112
|
+
projectPaths: [],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async calculateDirectorySize(dirPath) {
|
|
120
|
+
let size = 0;
|
|
121
|
+
try {
|
|
122
|
+
const entries = await fs.readdir(dirPath);
|
|
123
|
+
for (const entry of entries) {
|
|
124
|
+
const entryPath = path.join(dirPath, entry);
|
|
125
|
+
const stat = await fs.stat(entryPath);
|
|
126
|
+
if (stat.isDirectory()) {
|
|
127
|
+
size += await this.calculateDirectorySize(entryPath);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
size += stat.size;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Ignore errors
|
|
136
|
+
}
|
|
137
|
+
return size;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.YarnManager = YarnManager;
|
|
141
|
+
//# sourceMappingURL=yarn-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yarn-manager.js","sourceRoot":"","sources":["../../src/managers/yarn-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for PackagePurge service
|
|
3
|
+
*/
|
|
4
|
+
export declare enum PackageManager {
|
|
5
|
+
NPM = "npm",
|
|
6
|
+
YARN = "yarn",
|
|
7
|
+
PNPM = "pnpm"
|
|
8
|
+
}
|
|
9
|
+
export interface PackageInfo {
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
path: string;
|
|
13
|
+
lastAccessed: Date;
|
|
14
|
+
size: number;
|
|
15
|
+
manager: PackageManager;
|
|
16
|
+
projectPaths: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface ProjectInfo {
|
|
19
|
+
path: string;
|
|
20
|
+
manager: PackageManager;
|
|
21
|
+
dependencies: Map<string, string>;
|
|
22
|
+
lastModified: Date;
|
|
23
|
+
lockFilePath?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CleanupStrategy {
|
|
26
|
+
name: string;
|
|
27
|
+
rules: CleanupRule[];
|
|
28
|
+
mlEnabled: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface CleanupRule {
|
|
31
|
+
name: string;
|
|
32
|
+
condition: (packageInfo: PackageInfo) => boolean;
|
|
33
|
+
priority: number;
|
|
34
|
+
}
|
|
35
|
+
export interface CleanupResult {
|
|
36
|
+
packagesDeleted: PackageInfo[];
|
|
37
|
+
spaceSaved: number;
|
|
38
|
+
rollbackId?: string;
|
|
39
|
+
timestamp: Date;
|
|
40
|
+
}
|
|
41
|
+
export interface BackupInfo {
|
|
42
|
+
id: string;
|
|
43
|
+
timestamp: Date;
|
|
44
|
+
packages: PackageInfo[];
|
|
45
|
+
totalSize: number;
|
|
46
|
+
archivePath: string;
|
|
47
|
+
}
|
|
48
|
+
export interface Analytics {
|
|
49
|
+
totalSpaceSaved: number;
|
|
50
|
+
totalRollbacks: number;
|
|
51
|
+
totalReinstalls: number;
|
|
52
|
+
savingsToRiskRatio: number;
|
|
53
|
+
cacheHitRate: number;
|
|
54
|
+
projectsAnalyzed: number;
|
|
55
|
+
lastCleanup: Date | null;
|
|
56
|
+
}
|
|
57
|
+
export interface OptimizationConfig {
|
|
58
|
+
preserveDays: number;
|
|
59
|
+
keepVersions: number;
|
|
60
|
+
enableML: boolean;
|
|
61
|
+
enableSymlinking: boolean;
|
|
62
|
+
backupEnabled: boolean;
|
|
63
|
+
managers: PackageManager[];
|
|
64
|
+
dryRun: boolean;
|
|
65
|
+
lruMaxPackages?: number;
|
|
66
|
+
lruMaxSizeBytes?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface OptimizeResult {
|
|
69
|
+
items: Array<{
|
|
70
|
+
target_path: string;
|
|
71
|
+
estimated_size_bytes: number;
|
|
72
|
+
reason: string;
|
|
73
|
+
}>;
|
|
74
|
+
total_estimated_bytes: number;
|
|
75
|
+
}
|
|
76
|
+
export interface SymlinkResult {
|
|
77
|
+
status: string;
|
|
78
|
+
symlinked_count: number;
|
|
79
|
+
}
|
|
80
|
+
export interface DependencyGraph {
|
|
81
|
+
nodes: Map<string, PackageInfo>;
|
|
82
|
+
edges: Map<string, string[]>;
|
|
83
|
+
rootProjects: ProjectInfo[];
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,cAAc;IACxB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core type definitions for PackagePurge service
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PackageManager = void 0;
|
|
7
|
+
var PackageManager;
|
|
8
|
+
(function (PackageManager) {
|
|
9
|
+
PackageManager["NPM"] = "npm";
|
|
10
|
+
PackageManager["YARN"] = "yarn";
|
|
11
|
+
PackageManager["PNPM"] = "pnpm";
|
|
12
|
+
})(PackageManager || (exports.PackageManager = PackageManager = {}));
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,6BAAW,CAAA;IACX,+BAAa,CAAA;IACb,+BAAa,CAAA;AACf,CAAC,EAJW,cAAc,8BAAd,cAAc,QAIzB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
DEBUG = 0,
|
|
3
|
+
INFO = 1,
|
|
4
|
+
WARN = 2,
|
|
5
|
+
ERROR = 3
|
|
6
|
+
}
|
|
7
|
+
declare class Logger {
|
|
8
|
+
private level;
|
|
9
|
+
setLevel(level: LogLevel): void;
|
|
10
|
+
debug(message: string, ...args: any[]): void;
|
|
11
|
+
info(message: string, ...args: any[]): void;
|
|
12
|
+
warn(message: string, ...args: any[]): void;
|
|
13
|
+
error(message: string, ...args: any[]): void;
|
|
14
|
+
success(message: string, ...args: any[]): void;
|
|
15
|
+
}
|
|
16
|
+
export declare const logger: Logger;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=logger.d.ts.map
|