add new nx generator that name is update-version

pull/16725/head
Mahmut Gundogdu 2 years ago
parent 03e11e929d
commit 7b2d7a57cf

@ -135,7 +135,10 @@
"tslib": "^2.3.0",
"tslint": "~6.1.0",
"typescript": "5.0.4",
"zone.js": "~0.13.0"
"zone.js": "~0.13.0",
"@nx/devkit": "16.2.2",
"@nx/plugin": "^16.2.2",
"@swc/helpers": "~0.5.0"
},
"lint-staged": {
"**/*.{js,jsx,ts,tsx,html,css,scss}": [

@ -0,0 +1,14 @@
{
"generators": {
"generate-proxy": {
"factory": "./src/generators/generate-proxy/generator",
"schema": "./src/generators/generate-proxy/schema.json",
"description": "generate-proxy generator"
},
"update-version": {
"factory": "./src/generators/update-version/generator",
"schema": "./src/generators/update-version/schema.json",
"description": "update-version generator"
}
}
}

@ -0,0 +1,2 @@
export * from './schema';
export * from './generator';

@ -0,0 +1,50 @@
import { Tree, updateJson } from '@nx/devkit';
import { UpdateVersionGeneratorSchema } from './schema';
import { getPackageJsonList, getVersionByPackageNameFactory, semverRegex } from './utils';
export function updateVersionGenerator(tree: Tree, schema: UpdateVersionGeneratorSchema) {
const packageJsonList = getPackageJsonList(tree, schema.packages || []);
const getVersionNumberByPackageName = getVersionByPackageNameFactory(
schema.abpVersion,
schema.leptonXVersion,
);
packageJsonList.forEach(path => {
updateJson(tree, path, pkgJson => {
pkgJson.version = getVersionNumberByPackageName(pkgJson.name) || pkgJson.version;
console.log('\x1b[32m', `Updated ${pkgJson.name} version to ${pkgJson.version}`);
Object.keys(pkgJson.dependencies || {}).forEach(key => {
const v = getVersionNumberByPackageName(key);
if (!v) {
return;
}
pkgJson.dependencies[key] = pkgJson.dependencies[key].replace(semverRegex, v);
console.log('\x1b[32m', `Updated ${key} version to ${v} in dependencies`);
});
Object.keys(pkgJson.peerDependencies || {}).forEach(key => {
const v = getVersionNumberByPackageName(key);
if (!v) {
return;
}
pkgJson.peerDependencies[key] = pkgJson.peerDependencies[key].replace(semverRegex, v);
console.log('\x1b[32m', `Updated ${key} version to ${schema.abpVersion} in peerDependencies`);
});
Object.keys(pkgJson.devDependencies || {}).forEach(key => {
const v = getVersionNumberByPackageName(key);
if (!v) {
return;
}
pkgJson.devDependencies[key] = pkgJson.devDependencies[key].replace(semverRegex, v);
console.log('\x1b[32m', `Updated ${key} version to ${schema.abpVersion} on devDependencies`);
});
return pkgJson;
});
});
// eslint-disable-next-line @typescript-eslint/no-empty-function
return () => {};
}
export default updateVersionGenerator;

@ -0,0 +1,3 @@
export * from './generator';
export * from './schema';
export * from './utils'

@ -0,0 +1,5 @@
export interface UpdateVersionGeneratorSchema {
abpVersion:string;
leptonXVersion: string;
packages?: string[];
}

@ -0,0 +1,27 @@
{
"$schema": "http://json-schema.org/schema",
"$id": "UpdateVersion",
"title": "",
"type": "object",
"properties": {
"abpVersion": {
"type": "string",
"description": "",
"$default": {
"$source": "argv",
"index": 0
},
"x-prompt": "What ABP version would you like to use?"
},
"leptonXVersion": {
"type": "string",
"description": "",
"$default": {
"$source": "argv",
"index": 1
},
"x-prompt": "What Lepton X version would you like to use?"
}
},
"required": ["abpVersion"]
}

@ -0,0 +1,65 @@
import { getProjects, readJson, readProjectConfiguration, Tree } from '@nx/devkit';
export const IGNORED_PROJECT_NAMES = ['apex-chart-components', 'bs-components', 'workspace-plugin'];
export function getPackageJsonList(tree: Tree, packages: string[]): string[] {
const project = getProjects(tree);
const result = ['/package.json'];
project.forEach((value, key) => {
if (value.projectType !== 'library') {
return;
}
if (IGNORED_PROJECT_NAMES.some(x => x === key)) {
return;
}
const projectConfiguration = readProjectConfiguration(tree, key);
if (packages.length && !packages.includes(value.name)) {
return;
}
result.push(projectConfiguration.root + '/package.json');
});
return result;
}
export function getPackageNameList(tree: Tree, packageJsonList: string[]) {
return packageJsonList.map(packageJson => {
const jsonFile = readJson(tree, packageJson);
return jsonFile.name;
});
}
const leptonPackages = [
'@abp/ng.theme.lepton-x',
'@volosoft/ngx-lepton-x',
'@volo/abp.ng.lepton-x.core',
'@volo/ngx-lepton-x.core',
'@volo/ngx-lepton-x.lite',
'@volosoft/abp.ng.theme.lepton-x',
];
const abpPackageNameRegex = /^@(abp|volo|volosoft)\/.*/;
export function isAbpPack(packageName) {
return abpPackageNameRegex.test(packageName) && !leptonPackages.includes(packageName);
}
export function functionisLeptonXPack(packageName) {
return leptonPackages.includes(packageName);
}
export function getVersionByPackageNameFactory(abpVersionName: string, leptonXVersionName: string) {
return (packageName: string) => {
if (isAbpPack(packageName)) {
return abpVersionName;
}
if (functionisLeptonXPack(packageName)) {
return leptonXVersionName;
}
return '';
};
}
export const semverRegex =
/\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/;

@ -0,0 +1 @@
export * from './generators/generate-proxy'

@ -14,7 +14,6 @@
"baseUrl": "./",
"allowSyntheticDefaultImports": true,
"paths": {
"@abp/nx.generators": ["packages/generators/src/index.ts"],
"@abp/ng.account": ["packages/account/src/public-api.ts"],
"@abp/ng.account.core": ["packages/account-core/src/public-api.ts"],
"@abp/ng.account.core/proxy": ["packages/account-core/proxy/src/public-api.ts"],
@ -45,7 +44,8 @@
"@abp/ng.theme.basic/testing": ["packages/theme-basic/testing/src/public-api.ts"],
"@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"],
"@abp/ng.theme.shared/extensions": ["packages/theme-shared/extensions/src/public-api.ts"],
"@abp/ng.theme.shared/testing": ["packages/theme-shared/testing/src/public-api.ts"]
"@abp/ng.theme.shared/testing": ["packages/theme-shared/testing/src/public-api.ts"],
"@abp/nx.generators": ["packages/generators/src/index.ts"]
}
},
"exclude": ["node_modules", "tmp"]

Loading…
Cancel
Save