diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 5434dc3f02..4583d98f48 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -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}": [ diff --git a/npm/ng-packs/packages/generators/generators.json b/npm/ng-packs/packages/generators/generators.json new file mode 100644 index 0000000000..8910e6fdba --- /dev/null +++ b/npm/ng-packs/packages/generators/generators.json @@ -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" + } + } +} diff --git a/npm/ng-packs/packages/generators/src/generators/generate-proxy/index.ts b/npm/ng-packs/packages/generators/src/generators/generate-proxy/index.ts new file mode 100644 index 0000000000..e1f4516101 --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/generate-proxy/index.ts @@ -0,0 +1,2 @@ +export * from './schema'; +export * from './generator'; \ No newline at end of file diff --git a/npm/ng-packs/packages/generators/src/generators/update-version/generator.ts b/npm/ng-packs/packages/generators/src/generators/update-version/generator.ts new file mode 100644 index 0000000000..efdcfd5665 --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/update-version/generator.ts @@ -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; diff --git a/npm/ng-packs/packages/generators/src/generators/update-version/index.ts b/npm/ng-packs/packages/generators/src/generators/update-version/index.ts new file mode 100644 index 0000000000..b047df9dfb --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/update-version/index.ts @@ -0,0 +1,3 @@ +export * from './generator'; +export * from './schema'; +export * from './utils' \ No newline at end of file diff --git a/npm/ng-packs/packages/generators/src/generators/update-version/schema.d.ts b/npm/ng-packs/packages/generators/src/generators/update-version/schema.d.ts new file mode 100644 index 0000000000..93d1f4315c --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/update-version/schema.d.ts @@ -0,0 +1,5 @@ +export interface UpdateVersionGeneratorSchema { + abpVersion:string; + leptonXVersion: string; + packages?: string[]; +} diff --git a/npm/ng-packs/packages/generators/src/generators/update-version/schema.json b/npm/ng-packs/packages/generators/src/generators/update-version/schema.json new file mode 100644 index 0000000000..9314159df7 --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/update-version/schema.json @@ -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"] +} diff --git a/npm/ng-packs/packages/generators/src/generators/update-version/utils.ts b/npm/ng-packs/packages/generators/src/generators/update-version/utils.ts new file mode 100644 index 0000000000..4ff98e7443 --- /dev/null +++ b/npm/ng-packs/packages/generators/src/generators/update-version/utils.ts @@ -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-]+)*)?$/; diff --git a/npm/ng-packs/packages/generators/src/index.ts b/npm/ng-packs/packages/generators/src/index.ts new file mode 100644 index 0000000000..9a6fb02c00 --- /dev/null +++ b/npm/ng-packs/packages/generators/src/index.ts @@ -0,0 +1 @@ +export * from './generators/generate-proxy' \ No newline at end of file diff --git a/npm/ng-packs/tsconfig.base.json b/npm/ng-packs/tsconfig.base.json index 162cc0ad08..163b14c0cf 100644 --- a/npm/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/tsconfig.base.json @@ -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"]