@pnp/cli-microsoft365
Version:
Manage Microsoft 365 and SharePoint Framework projects on any platform
71 lines • 2.83 kB
JavaScript
import { coerce, satisfies } from 'semver';
import { JsonRule } from '../../JsonRule.js';
export class DependencyRule extends JsonRule {
constructor(packageName, supportedRange, isDevDep = false) {
super();
this.packageName = packageName;
this.supportedRange = supportedRange;
this.isDevDep = isDevDep;
}
get title() {
return this.packageName;
}
get description() {
return '';
}
get resolution() {
return `${(this.isDevDep ? 'installDev' : 'install')} ${this.packageName}@${this.supportedRange.includes(' ') ? `"${this.supportedRange}"` : this.supportedRange}`;
}
get resolutionType() {
return 'cmd';
}
get severity() {
return 'Required';
}
get file() {
return './package.json';
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
customCondition(project) {
return true;
}
visit(project, findings) {
if (!project.packageJson || !this.customCondition(project)) {
return;
}
// if the project has no dependencies, then we assume the package is missing
let packageNotFound = (this.isDevDep && !project.packageJson.devDependencies) ||
(!this.isDevDep && !project.packageJson.dependencies);
let minSemVer = null;
if (!packageNotFound) {
// try to get the current version of the dependency installed in the
// project. If not possible, we assume the dependency is missing
const packageVersionFromProject = this.isDevDep ? project.packageJson.devDependencies[this.packageName] : project.packageJson.dependencies[this.packageName];
if (!packageVersionFromProject) {
packageNotFound = true;
}
else {
minSemVer = coerce(packageVersionFromProject);
if (!minSemVer) {
packageNotFound = true;
}
}
}
if (packageNotFound) {
return this.addFindingWithCustomInfo(this.title, `Install missing package ${this.packageName}`, [{
file: this.file,
resolution: this.resolution
}], findings);
}
if (satisfies(minSemVer, this.supportedRange)) {
return;
}
const node = this.getAstNodeFromFile(project.packageJson, `${(this.isDevDep ? 'devDependencies' : 'dependencies')}.${this.packageName}`);
this.addFindingWithCustomInfo(this.title, `Install supported version of the ${this.packageName} package`, [{
file: this.file,
resolution: this.resolution,
position: this.getPositionFromNode(node)
}], findings);
}
}
//# sourceMappingURL=DependencyRule.js.map