diff --git a/npm/scripts/change-package-version.ts b/npm/scripts/change-package-version.ts new file mode 100644 index 00000000000..748633d465b --- /dev/null +++ b/npm/scripts/change-package-version.ts @@ -0,0 +1,100 @@ +import glob from "glob"; +import fse from "fs-extra"; +import {program} from "commander"; + +(function findPackageJsonFiles() { + setupCommander(); + const options = { + ignore: [ + "../../**/node_modules/**", + "../../**/dist/**", + "../../**/build/**", + "../../**/scripts/**", + "../../**/wwwroot/**" + ] + }; + + const workingDir = "../../"; + glob(`${workingDir}**/package.json`, options, (err, files) => { + if (err) throw err; + + const {packageName,targetVersion}= program.opts(); + + for (const file of files) { + readPackageJsonFile(file, packageName, targetVersion); + } + }); +})(); + +function readPackageJsonFile(path, key, newVersion) { + const replace = (block, key, newVersion) => { + const founded = Object.keys(block).filter(x => x === key); + if (founded.length > 0) { + let value = block[key]; + value = value.replace(semverRegex, newVersion); + return [true, { + ...block, + [key]:value + }]; + } + return [false, block]; + }; + fse.readJson(path, (err, packageObj) => { + if (err) throw err; + + const { dependencies, peerDependencies, devDependencies } = packageObj; + const results = []; + + let result = { ...packageObj }; + if (dependencies) { + const [founded, d] = replace(dependencies, key, newVersion); + results.push(founded); + result = { + ...result, dependencies: d + }; + } + if (peerDependencies) { + const [founded, p] = replace(peerDependencies, key, newVersion); + results.push(founded); + result = { + ...result, peerDependencies: p + }; + } + if (devDependencies) { + const [founded, d] = replace(devDependencies, key, newVersion); + results.push(founded); + result = { + ...result, devDependencies: d + }; + } + const anyChanges = !results.some(x => x); + if (anyChanges) { + return; + } + console.log("changed", path); + writeFile(path, result); + } + ) + ; +} +export const semverRegex = + /\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/; + +function writeFile(path, result) { + return fse.writeJson(path, result, { spaces: 2 }); +} + + +function setupCommander() { + program + .option( + "-n, --packageName ", + "Package name" + ) + .option( + "-v, --targetVersion ", + "Version number of the package" + ); + + program.parse(process.argv); +} diff --git a/npm/scripts/package.json b/npm/scripts/package.json index bbf9c8bebf6..6cc0b6bdb6c 100644 --- a/npm/scripts/package.json +++ b/npm/scripts/package.json @@ -4,12 +4,13 @@ "description": "", "scripts": { "remove-lock-files": "yarn && ts-node -r tsconfig-paths/register remove-lock-files.ts", - "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts" + "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts", + "change-package-version": "ts-node -r tsconfig-paths/register change-package-version.ts -n @abp/ng.theme.lepton-x -v 3.0.0" }, "dependencies": { "axios": "^0.24.0", "chalk": "^4.1.0", - "commander": "^8.3.0", + "commander": "^11.0.0", "execa": "^5.1.1", "fs-extra": "^9.0.1", "glob": "^7.1.6", diff --git a/npm/scripts/yarn.lock b/npm/scripts/yarn.lock index 2feefc9b8af..97f2d15e368 100644 --- a/npm/scripts/yarn.lock +++ b/npm/scripts/yarn.lock @@ -417,16 +417,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"