@adinsure-ops/ops-cli
Version:
Operations CLI for working with AdInsure
84 lines (83 loc) • 3.29 kB
JavaScript
import { __awaiter } from "tslib";
import { Args, Flags } from '@oclif/core';
import chalk from 'chalk';
import fs from 'fs-extra';
import semver from 'semver';
import CommandBase from '../../command.base.js';
import NugetContext from '../../lib/nuget.js';
class NuGetDependencyUpdate extends CommandBase {
/**
* Update dependencies in csproj files for @adinsure packages
* @param
*/
/**
* Update dependencies in csproj files for @adinsure packages
* @param {string} newVersion New version to update to
* @param {NpmPackage[]} packages Packages to update
* @param {string[]} filter Regular expressions filter for packages
* @returns {Prmoise<void>} Void Promise
*/
updateDependencies(newVersion_1, packages_1) {
return __awaiter(this, arguments, void 0, function* (newVersion, packages, filter = '') {
// Find all package.json files that are not in node modules
for (const path of packages) {
try {
const data = yield fs.readFile(path, 'utf8');
const re = new RegExp('(<PackageReference Include=".*' + filter + `.*" Version=)".*"( />)`, 'g');
const result = data.replace(re, '$1"' + newVersion + '"$2');
yield fs.writeFile(path, result, 'utf8');
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
this.warn(error.message);
break;
}
}
});
}
run() {
const _super = Object.create(null, {
run: { get: () => super.run }
});
return __awaiter(this, void 0, void 0, function* () {
_super.run.call(this);
const { args, flags } = yield this.parse(NuGetDependencyUpdate);
const newVersion = semver.valid(args.version);
const nugetContext = new NugetContext();
// Stop if version invalid
if (!newVersion) {
return this.error(`${chalk.red('Version in incorrect format')}`);
}
const packages = yield nugetContext.projectList(flags.exclude);
try {
yield this.updateDependencies(newVersion, packages, flags.filter);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
this.error(error.message);
}
});
}
}
NuGetDependencyUpdate.description = 'update nuget dependencies per package filter';
NuGetDependencyUpdate.usage = 'nuget:dependency-update <type> [flags]';
NuGetDependencyUpdate.examples = [
`$ ops nuget:dependency-update 3.4.3 --filter Adacta.AdInsure --exclude Scheduler`,
];
NuGetDependencyUpdate.args = {
version: Args.string({
required: true,
description: 'Type of release',
}),
};
NuGetDependencyUpdate.flags = {
filter: Flags.string({
description: 'regular expression for which NuGet packages to update',
required: true,
}),
exclude: Flags.string({
description: 'exclude directories where to search for csproj files',
multiple: true,
}),
};
export default NuGetDependencyUpdate;