@trumbitta/nx-plugin-unused-deps
Version:
[](https://www.npmjs.com/@trumbitta/nx-plugin-unused-deps) []()
62 lines • 2.81 kB
JavaScript
;
// Based on code by Philip Fulcher @PhilipJFulcher
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const devkit_1 = require("@nrwl/devkit");
const project_graph_1 = require("@nrwl/workspace/src/core/project-graph");
function default_1(tree, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const nxGraphDependencies = yield checkDeps();
const packageJson = devkit_1.readJson(tree, 'package.json');
const jsonFile = `.nx-plugin-unused-deps.json`;
const packageIsNotDependedOn = (depName) => {
if (depName.startsWith('@types/')) {
// for @types/ packages, we actually want to check if the underlying package is depended on
// ie: "@types/express" is depended on if "express" is depended on
depName = depName.replace('@types/', '');
}
const isDependedOn = nxGraphDependencies[`npm:${depName}`] != null;
return !isDependedOn;
};
const dependencies = {
dependencies: Object.keys(packageJson.dependencies).filter(packageIsNotDependedOn),
devDependencies: Object.keys(packageJson.devDependencies).filter(packageIsNotDependedOn),
};
logDependencies(dependencies, options.json, jsonFile);
if (options.fix) {
updatePackageJson(tree, dependencies);
}
});
}
exports.default = default_1;
function updatePackageJson(tree, packageJsonDeps) {
const { dependencies, devDependencies } = packageJsonDeps;
devkit_1.removeDependenciesFromPackageJson(tree, dependencies, devDependencies);
devkit_1.logger.info(`nx-plugin-unused-deps - updated package.json`);
}
function logDependencies(dependencies, toJson, jsonFile) {
devkit_1.logger.log(dependencies);
if (toJson) {
devkit_1.writeJsonFile(jsonFile, dependencies);
devkit_1.logger.info(`nx-plugin-unused-deps - unused dependencies written to:\n${jsonFile}`);
}
}
function checkDeps(packageRecord = {}) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const graph = yield project_graph_1.createProjectGraphAsync();
Object.keys(graph.dependencies).forEach((projectName) => {
const deps = graph.dependencies[projectName];
const libNames = deps.filter((dep) => dep.target.startsWith('npm')).map((dep) => dep.target);
libNames.forEach((libName) => {
if (packageRecord[libName] === undefined) {
packageRecord[libName] = 1;
}
else {
packageRecord[libName]++;
}
});
});
return packageRecord;
});
}
//# sourceMappingURL=generator.js.map