tools/convert.js (115 lines of code) (raw):

#!/usr/bin/env node 'use strict'; const fs = require('fs'); const retry_config = require('../aliyun-net-sdk-core/Retry/Util/retry_config.json'); const timeout_config = require('../aliyun-net-sdk-core/Timeout/Util/timeout_config.json'); const endpoints = require('../aliyun-net-sdk-core/Regions/endpoints.json'); var level = 4; String.prototype.capitalize = function () { return this.charAt(0).toUpperCase() + this.slice(1); } function render(template, param) { var str = template; for (const key in param) { str = str.replace("{" + key + "}", param[key]) } return str; } function emit(content, levelRow) { if (levelRow === undefined) { levelRow = level; } return "\n" + ' '.repeat(levelRow * 4) + content; } function convert_retry_config() { level = 4; var str = ""; for (const product in retry_config) { const productVarName = "product" + product.capitalize(); str += emit(`Product ${productVarName} = new Product();`) str += emit(`${productVarName}.ProductName = "${product}";`) for (const version in retry_config[product]) { const versionVarName = "version" + version.replace("-", "").replace("-", ""); str += emit(`Version ${versionVarName} = new Version();`); str += emit(`${versionVarName}.VersionDate = "${version}";`); for (const section in retry_config[product][version]) { for (const api of retry_config[product][version][section]) { str += emit(`${versionVarName}.${section}.Add("${api}");`); } } str += emit(`${productVarName}.versions.Add("${version}", ${versionVarName});`); } str += emit(''); str += emit(`try { products.Add("${product}", ${productVarName}); }`); str += emit(`catch (ArgumentException) { }`); } return str; } function convert_timeout_config() { level = 4; var str = ""; for (const product in timeout_config) { const productVarName = "product" + product.capitalize(); str += emit(`Product ${productVarName} = new Product();`) str += emit(`${productVarName}.ProductName = "${product}";`) for (const version in timeout_config[product]) { const versionVarName = "version" + version.replace("-", "").replace("-", ""); str += emit(`Version ${versionVarName} = new Version();`); str += emit(`${versionVarName}.VersionDate = "${version}";`); for (const api in timeout_config[product][version]) { const timeout = timeout_config[product][version][api]; str += emit(`${versionVarName}.Apis.Add("${api}", ${timeout});`); } str += emit(`${productVarName}.versions.Add("${version}", ${versionVarName});`); } str += emit(''); str += emit(`try { products.Add("${product}", ${productVarName}); }`); str += emit(`catch (ArgumentException) { }`); } return str; } function convert_endpoints() { level = 4; var params = { global_endpoints: "", regional_endpoints: "", regions: "", regional_endpoint_pattern: "", location_code_mapping: "" }; for (const product in endpoints["global_endpoints"]) { params.global_endpoints += emit(`GlobalEndpoints.Add("${product}", "${endpoints["global_endpoints"][product]}");`); } for (const product in endpoints["regional_endpoints"]) { for (const region_id in endpoints["regional_endpoints"][product]) { params.regional_endpoints += emit(`RegionalEndpoints.Add("${product}_${region_id}", "${endpoints["regional_endpoints"][product][region_id]}");`); } } for (const index in endpoints["regions"]) { params.regions += emit(`Regions.Add("${endpoints["regions"][index]}");`); } for (const product in endpoints["regional_endpoint_pattern"]) { params.regional_endpoint_pattern += emit(`RegionalEndpointPattern.Add("${product}", "${endpoints["regional_endpoint_pattern"][product]}");`); } for (const product in endpoints["location_code_mapping"]) { params.location_code_mapping += emit(`LocationCodeMapping.Add("${product}", "${endpoints["location_code_mapping"][product]}");`); } return params; } fs.writeFileSync('../aliyun-net-sdk-core/Retry/Util/RetryConfig.cs', render( fs.readFileSync('./source/RetryConfig.cs.template').toString(), { retry_config_data: convert_retry_config(retry_config) } ) ); fs.writeFileSync('../aliyun-net-sdk-core/Timeout/Util/TimeoutConfig.cs', render( fs.readFileSync('./source/TimeoutConfig.cs.template').toString(), { timeout_config_data: convert_timeout_config(timeout_config) } ) ); fs.writeFileSync('../aliyun-net-sdk-core/Regions/EndpointResource.cs', render( fs.readFileSync('./source/EndpointResource.cs.template').toString(), convert_endpoints() ) );