| 20 | const packageDir = path.join(rootDir, "packages") |
| 21 | |
| 22 | async function check(projectDir, devPackageData) { |
| 23 | const packageName = path.basename(projectDir) |
| 24 | // console.log(`Checking ${projectDir}`) |
| 25 | |
| 26 | /** |
| 27 | * @type {Results} |
| 28 | */ |
| 29 | const result = await new Promise(resolve => { |
| 30 | depCheck(projectDir, { ignoreDirs: ["out", "test", "pages", "typings", "docker", "certs", "templates", "vendor"] }, resolve) |
| 31 | }) |
| 32 | |
| 33 | let unusedDependencies = result.dependencies |
| 34 | if (unusedDependencies.length > 0) { |
| 35 | if (packageName === "electron-builder") { |
| 36 | unusedDependencies = unusedDependencies.filter(it => it !== "dmg-builder") |
| 37 | } |
| 38 | if (packageName === "app-builder-lib") { |
| 39 | // @electron/universal is loaded via dynamicImport() which depcheck cannot statically detect |
| 40 | unusedDependencies = unusedDependencies.filter(it => it !== "@electron/universal") |
| 41 | } |
| 42 | if (unusedDependencies.length > 0) { |
| 43 | console.error(`${chalk.bold(packageName)} Unused dependencies: ${JSON.stringify(unusedDependencies, null, 2)}`) |
| 44 | return false |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | let unusedDevDependencies = result.devDependencies.filter(it => !it.startsWith("@types/") && !knownUnusedDevDependencies.has(it)) |
| 49 | if (packageName === "electron-builder") { |
| 50 | unusedDevDependencies = unusedDevDependencies.filter(it => ["is-ci", "vitest"].indexOf(it) < 0) |
| 51 | } |
| 52 | if (packageName === "dmg-builder") { |
| 53 | unusedDevDependencies = unusedDevDependencies.filter(it => it !== "temp-file") |
| 54 | } |
| 55 | if (unusedDevDependencies.length > 0) { |
| 56 | console.error(`${chalk.bold(packageName)} Unused devDependencies: ${JSON.stringify(unusedDevDependencies, null, 2)}`) |
| 57 | return false |
| 58 | } |
| 59 | |
| 60 | delete result.missing.electron |
| 61 | const toml = result.missing.toml |
| 62 | if (toml != null && toml.length === 1 && toml[0].endsWith("config.js")) { |
| 63 | delete result.missing.toml |
| 64 | } |
| 65 | |
| 66 | if (packageName === "electron-builder") { |
| 67 | delete result.missing["electron-publish"] |
| 68 | } |
| 69 | |
| 70 | for (const name of Object.keys(result.missing)) { |
| 71 | if ( |
| 72 | name === "electron-builder-squirrel-windows" || |
| 73 | name === "electron-webpack" || |
| 74 | (packageName === "app-builder-lib" && (name === "dmg-builder" || knownMissedDependencies.has(name) || name.startsWith("@babel/"))) |
| 75 | ) { |
| 76 | delete result.missing[name] |
| 77 | } |
| 78 | } |
| 79 | |