Skip to content

Instantly share code, notes, and snippets.

@BSFishy
Last active October 16, 2023 16:39
Show Gist options
  • Save BSFishy/65ce010bfb8af68f4aca7aacc784089b to your computer and use it in GitHub Desktop.
Save BSFishy/65ce010bfb8af68f4aca7aacc784089b to your computer and use it in GitHub Desktop.
/*
* 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