mirror of https://github.com/abpframework/abp.git
10 changed files with 173 additions and 3 deletions
@ -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' |
||||
Loading…
Reference in new issue