kv-clearnup/electron/features/enforcer.ts
2026-02-02 08:33:46 +07:00

45 lines
1.6 KiB
TypeScript

import fs from 'fs';
import path from 'path';
import { dialog, app } from 'electron';
// The pnpm Force
// Watches for package-lock.json or yarn.lock and warns the user.
export function startEnforcement(projectPath: string) {
// We can use fs.watch, but strictly we might want to watch the specific directory
// where the user is working.
// For this app, maybe we watch the projects user adds?
// Or do we implement a global watcher? The PRD implies "actively monitor".
// Monitoring the entire filesystem is expensive.
// We'll assume we monitor specific "Active Projects" added to the app.
// Implementation note: This function would be called for each watched project.
const watcher = fs.watch(projectPath, (eventType, filename) => {
if (filename === 'package-lock.json' || filename === 'yarn.lock') {
const lockFile = path.join(projectPath, filename);
if (fs.existsSync(lockFile)) {
handleViolation(lockFile);
}
}
});
return watcher;
}
function handleViolation(lockFile: string) {
dialog.showMessageBox({
type: 'warning',
title: 'The pnpm Force',
message: `Illegal lockfile detected: ${path.basename(lockFile)}`,
detail: 'You must use pnpm! Do you want to convert now?',
buttons: ['Convert to pnpm', 'Delete Lockfile', 'Ignore'],
defaultId: 0
}).then(result => {
if (result.response === 0) {
// Run conversion
} else if (result.response === 1) {
fs.unlinkSync(lockFile);
}
});
}