mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-03 12:02:53 +00:00
fix: simplify dependency version checking
This commit is contained in:
@@ -105,8 +105,11 @@ checkCopyrightYears(projectPath, 'src', commander.opts().replace);
|
||||
const indentation = 2;
|
||||
|
||||
if (packageJsonChanged) {
|
||||
// eslint-disable-next-line unicorn/no-null
|
||||
writeFileSync(path.resolve(projectPath, 'package.json'), JSON.stringify(packageJson, null, indentation));
|
||||
writeFileSync(
|
||||
path.resolve(projectPath, 'package.json'),
|
||||
// eslint-disable-next-line unicorn/no-null
|
||||
`${JSON.stringify(packageJson, null, indentation)}\n`,
|
||||
);
|
||||
consoleLog(`Changes were written to '${packageJsonPath}'.`);
|
||||
}
|
||||
|
||||
|
||||
@@ -204,58 +204,65 @@ export function consoleLog(...arguments_: string[]): void {
|
||||
* @param packageJson package.json to check dependencies in
|
||||
*/
|
||||
export function checkDependencies(rules: Rules, packageJson: PackageJSON): void {
|
||||
if (typeof packageJson.dependencies === 'object') {
|
||||
for (const dependency of rules.dependencies) {
|
||||
const [name, version] = dependency.split(':');
|
||||
const installedVersion = packageJson.dependencies[name];
|
||||
checkPackages(rules.dependencies, packageJson.dependencies, false);
|
||||
checkPackages(rules.devDependencies, packageJson.devDependencies, true);
|
||||
}
|
||||
|
||||
if (
|
||||
typeof packageJson.dependencies === 'undefined' ||
|
||||
typeof packageJson.dependencies[name] === 'undefined'
|
||||
) {
|
||||
consoleWarn(`Dependency '${name}' is missing.
|
||||
Please install with 'npm install --save-exact ${name}'.`);
|
||||
} else if (
|
||||
typeof version !== 'undefined' &&
|
||||
typeof valid(version) === 'string' &&
|
||||
!satisfies(installedVersion, version)
|
||||
) {
|
||||
consoleWarn(
|
||||
`Version '${installedVersion}' of dependency '${name} does not satisfy constraint '${version}'.`,
|
||||
);
|
||||
/**
|
||||
* Check dependencies are installed
|
||||
*
|
||||
* @param expected Expected npm package entries
|
||||
* @param acutal Actual entries within package.json
|
||||
* @param development Indicator if this concerns dev dependencies
|
||||
*/
|
||||
export function checkPackages(
|
||||
expected: string[] | undefined,
|
||||
acutal: {[key: string]: string} | undefined,
|
||||
development = false,
|
||||
): void {
|
||||
if (typeof expected === 'undefined') {
|
||||
return;
|
||||
}
|
||||
if (typeof acutal === 'undefined') {
|
||||
reportPackage(expected, development);
|
||||
return;
|
||||
}
|
||||
for (let npmPackage of expected) {
|
||||
const [name, expectedVersion] = npmPackage.split(':');
|
||||
const installedVersion = acutal[name];
|
||||
if (typeof installedVersion === 'undefined') {
|
||||
reportPackage(npmPackage, development);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof packageJson.devDependencies === 'object') {
|
||||
for (const developmentDependency of rules.devDependencies) {
|
||||
const [developmentName, developmentVersion] = developmentDependency.split(':');
|
||||
let installedVersion = packageJson.devDependencies[developmentName];
|
||||
if (typeof packageJson.dependencies === 'object') {
|
||||
const [name] = developmentDependency.split(':');
|
||||
if (typeof packageJson.devDependencies[name] === 'string') {
|
||||
installedVersion = packageJson.dependencies[name];
|
||||
if (typeof expectedVersion === 'undefined') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
(typeof packageJson.dependencies === 'undefined' ||
|
||||
typeof packageJson.dependencies[developmentName] === 'undefined') &&
|
||||
(typeof packageJson.devDependencies === 'undefined' ||
|
||||
typeof packageJson.devDependencies[developmentName] === 'undefined')
|
||||
) {
|
||||
consoleWarn(`Dev dependency '${developmentName}' is missing.
|
||||
Please install with 'npm install --save-exact --save-dev ${developmentName}'.`);
|
||||
} else if (
|
||||
typeof developmentVersion !== 'undefined' &&
|
||||
typeof valid(developmentVersion) === 'string' &&
|
||||
!satisfies(installedVersion, developmentVersion)
|
||||
) {
|
||||
if (typeof valid(expectedVersion) === 'string' && !satisfies(installedVersion, expectedVersion)) {
|
||||
npmPackage = npmPackage.replace(':', '@');
|
||||
consoleWarn(
|
||||
`Version '${installedVersion}' of dev dependency '${developmentName} does not satisfy constraint '${developmentVersion}'.`,
|
||||
`Version '${installedVersion}' of ${
|
||||
development ? 'dev ' : ' '
|
||||
}dependency '${name}' does not satisfy constraint '${expectedVersion}'.
|
||||
Please install with 'npm install --save-exact ${development ? '--save-dev ' : ''}${npmPackage}'.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reports truly missing npm packages
|
||||
*
|
||||
* @param missing Missing npm package entries
|
||||
* @param development Indicator if this concerns dev dependencies
|
||||
*/
|
||||
export function reportPackage(missing: string[] | string, development = false) {
|
||||
if (!Array.isArray(missing)) {
|
||||
missing = [missing];
|
||||
}
|
||||
for (let npmPackage of missing) {
|
||||
npmPackage = npmPackage.replace(':', '@');
|
||||
consoleWarn(`${development ? 'Dev dependency' : 'Dependency'} '${npmPackage}' is missing.
|
||||
Please install with 'npm install --save-exact ${development ? '--save-dev ' : ''}${npmPackage}'.`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user