mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-21 17:12:43 +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;
|
const indentation = 2;
|
||||||
|
|
||||||
if (packageJsonChanged) {
|
if (packageJsonChanged) {
|
||||||
// eslint-disable-next-line unicorn/no-null
|
writeFileSync(
|
||||||
writeFileSync(path.resolve(projectPath, 'package.json'), JSON.stringify(packageJson, null, indentation));
|
path.resolve(projectPath, 'package.json'),
|
||||||
|
// eslint-disable-next-line unicorn/no-null
|
||||||
|
`${JSON.stringify(packageJson, null, indentation)}\n`,
|
||||||
|
);
|
||||||
consoleLog(`Changes were written to '${packageJsonPath}'.`);
|
consoleLog(`Changes were written to '${packageJsonPath}'.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -204,58 +204,65 @@ export function consoleLog(...arguments_: string[]): void {
|
|||||||
* @param packageJson package.json to check dependencies in
|
* @param packageJson package.json to check dependencies in
|
||||||
*/
|
*/
|
||||||
export function checkDependencies(rules: Rules, packageJson: PackageJSON): void {
|
export function checkDependencies(rules: Rules, packageJson: PackageJSON): void {
|
||||||
if (typeof packageJson.dependencies === 'object') {
|
checkPackages(rules.dependencies, packageJson.dependencies, false);
|
||||||
for (const dependency of rules.dependencies) {
|
checkPackages(rules.devDependencies, packageJson.devDependencies, true);
|
||||||
const [name, version] = dependency.split(':');
|
}
|
||||||
const installedVersion = packageJson.dependencies[name];
|
|
||||||
|
|
||||||
if (
|
/**
|
||||||
typeof packageJson.dependencies === 'undefined' ||
|
* Check dependencies are installed
|
||||||
typeof packageJson.dependencies[name] === 'undefined'
|
*
|
||||||
) {
|
* @param expected Expected npm package entries
|
||||||
consoleWarn(`Dependency '${name}' is missing.
|
* @param acutal Actual entries within package.json
|
||||||
Please install with 'npm install --save-exact ${name}'.`);
|
* @param development Indicator if this concerns dev dependencies
|
||||||
} else if (
|
*/
|
||||||
typeof version !== 'undefined' &&
|
export function checkPackages(
|
||||||
typeof valid(version) === 'string' &&
|
expected: string[] | undefined,
|
||||||
!satisfies(installedVersion, version)
|
acutal: {[key: string]: string} | undefined,
|
||||||
) {
|
development = false,
|
||||||
consoleWarn(
|
): void {
|
||||||
`Version '${installedVersion}' of dependency '${name} does not satisfy constraint '${version}'.`,
|
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 expectedVersion === 'undefined') {
|
||||||
if (typeof packageJson.devDependencies === 'object') {
|
continue;
|
||||||
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 valid(expectedVersion) === 'string' && !satisfies(installedVersion, expectedVersion)) {
|
||||||
|
npmPackage = npmPackage.replace(':', '@');
|
||||||
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)
|
|
||||||
) {
|
|
||||||
consoleWarn(
|
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