Last active
October 16, 2023 16:39
-
-
Save BSFishy/65ce010bfb8af68f4aca7aacc784089b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright OpenSearch Contributors | |
* SPDX-License-Identifier: Apache-2.0 | |
*/ | |
/* eslint-disable @typescript-eslint/no-var-requires */ | |
const { | |
dependencies, | |
devDependencies, | |
peerDependencies, | |
} = require('./package.json'); | |
const fs = require('fs/promises'); | |
const path = require('path'); | |
const deps = new Set( | |
Object.keys({ | |
...peerDependencies, | |
...devDependencies, | |
...dependencies, | |
}) | |
); | |
async function iterateDirectory(directory, callback) { | |
const promises = []; | |
for (const file of await fs.readdir(directory, { withFileTypes: true })) { | |
const filepath = path.join(directory, file.name); | |
if (file.isFile()) { | |
promises.push(Promise.resolve(callback(filepath))); | |
} else if (file.isDirectory()) { | |
promises.push(iterateDirectory(filepath, callback)); | |
} | |
} | |
await Promise.all(promises); | |
} | |
async function searchDirectory(directoryName) { | |
const finds = new Set(); | |
await iterateDirectory( | |
path.resolve(__dirname, directoryName), | |
async (filepath) => { | |
const contents = await fs.readFile(filepath); | |
for (const dep of deps) { | |
if (contents.includes(dep)) { | |
finds.add(dep); | |
} | |
} | |
} | |
); | |
return finds; | |
} | |
async function run() { | |
// searchDirectory returns a set, so we get all the finds as sets, convert them all to arrays, flatten them into a single flat array, then convert it into a set to remove duplicates | |
const finds = new Set( | |
( | |
await Promise.all([ | |
searchDirectory('scripts'), | |
searchDirectory('src'), | |
searchDirectory('src-docs'), | |
]) | |
) | |
.map((find) => [...find]) | |
.flat() | |
); | |
// Filter out @types/, as those should be validated manually | |
const diff = [...deps] | |
.filter((dep) => !dep.startsWith('@types/')) | |
.filter((dep) => !finds.has(dep)); | |
diff.sort(); | |
console.log( | |
`Dependencies which aren't used directly anywhere in the code - ${JSON.stringify( | |
diff, | |
undefined, | |
2 | |
)}` | |
); | |
} | |
run().catch(console.error); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment