packages/ros-cdk-codegen/lib/pkg-generator.ts (39 lines of code) (raw):
import { tryReadPackageJson } from '../lib/util';
import { allTypes } from '@alicloud/ros-cdk-spec';
import * as fs from 'fs-extra';
const ROS_CDK_SCOPE = '@alicloud/';
const ROS_JAVA_PACKAGE = 'com.aliyun.';
const ROS_DOTNAT_PACKAGE = 'AlibabaCloud.SDK.ROS.CDK.';
export async function createPackages() {
// mkdir in the pkg root
const outdir = __dirname + '/../generatedPackages';
fs.mkdirpSync(outdir);
const scopes = await tryReadPackageJson(allTypes());
for(let index in scopes) {
// 为了处理只有Datasource没有Aliyun这类的资源类型
if (scopes[index].toString().startsWith('ALIYUN')) {
let service = scopes[index].split('::')[1].toLowerCase();
// if (service == 'eip' || service == 'eipanycast') {
// // 由于DATASOURCE::EIP::Addresses这个原本属于VPC资源的存在
// continue
// }
let scope = 'ros-cdk-' + service;
let pkgPath = outdir + '/' + scope;
let template_dir = __dirname + '/pkg-template';
fs.mkdirpSync(pkgPath);
fs.mkdirpSync(pkgPath + '/lib');
let pkg = fs.readJSONSync(template_dir + '/package.json');
pkg['name'] = ROS_CDK_SCOPE + scope;
pkg['description'] = pkg['description'].replace('replace-content', scope);
// jsii -> java
pkg['jsii']['targets']['java']['package'] = ROS_JAVA_PACKAGE + scope.split('-').join('.');
pkg['jsii']['targets']['java']['maven']['artifactId'] = scope;
// jsii -> python
pkg['jsii']['targets']['python']['module'] = scope.split('-').join('_')
pkg['jsii']['targets']['python']['distName'] = scope
// jsii -> dotnet
pkg['jsii']['targets']['dotnet']['namespace'] = ROS_DOTNAT_PACKAGE + service.toLowerCase().replace(/( |^)[a-z]/g, (L: string) => L.toUpperCase());
pkg['jsii']['targets']['dotnet']['packageId'] = ROS_DOTNAT_PACKAGE + service.toLowerCase().replace(/( |^)[a-z]/g, (L: string) => L.toUpperCase());
// jsii -> go
pkg['jsii']['targets']['go']['packageName'] = 'alicloudroscdk' + service;
fs.writeFileSync(pkgPath + '/package.json', JSON.stringify(pkg, null, 2), 'utf-8');
// copy README.md and gitignore
let readme = fs.readFileSync(template_dir + '/README.md');
fs.writeFileSync(pkgPath + '/README.md', readme.toString().replace(
/service-name/g, service.toUpperCase()).replace(/scope-name/g, scope));
fs.copySync(template_dir + '/gitignore-template', pkgPath + '/.gitignore');
fs.copySync(template_dir + '/LICENCE', pkgPath + '/LICENCE');
fs.copySync(template_dir + '/NOTICE', pkgPath + '/NOTICE');
}
}
}
createPackages();