import { readFileSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); interface PackageJson { dependencies?: Record; devDependencies?: Record; } function readPackageJson(path: string): PackageJson { const content = readFileSync(path, "utf-8"); return JSON.parse(content); } function getAllDependencyNames(pkg: PackageJson): Set { const names = new Set(); for (const name of Object.keys(pkg.dependencies ?? {})) { names.add(name); } for (const name of Object.keys(pkg.devDependencies ?? {})) { names.add(name); } return names; } const diachronPkgPath = join(__dirname, "diachron", "package.json"); const backendPkgPath = join(__dirname, "package.json"); const diachronPkg = readPackageJson(diachronPkgPath); const backendPkg = readPackageJson(backendPkgPath); const diachronDeps = getAllDependencyNames(diachronPkg); const backendDeps = getAllDependencyNames(backendPkg); const duplicates: string[] = []; for (const dep of diachronDeps) { if (backendDeps.has(dep)) { duplicates.push(dep); } } if (duplicates.length > 0) { console.error("Error: Duplicate dependencies found."); console.error(""); console.error( "The following dependencies exist in both backend/package.json and backend/diachron/package.json:", ); console.error(""); for (const dep of duplicates.sort()) { console.error(` - ${dep}`); } console.error(""); console.error( "Dependencies in backend/diachron/package.json are provided by the framework", ); console.error( "and must not be duplicated in backend/package.json. Remove them from", ); console.error("backend/package.json to fix this error."); process.exit(1); } console.log("No duplicate dependencies found.");