From 5136bb5930395760c7f46c50a69c85d681d82ea8 Mon Sep 17 00:00:00 2001 From: Ivan Zuev Date: Thu, 23 Dec 2021 15:50:22 +0300 Subject: [PATCH] feat: generate exports for all entities in cloud api --- scripts/generate-code.ts | 46 +-- scripts/services.ts | 282 +++++++++--------- src/generated/yandex/cloud/access/index.ts | 1 + src/generated/yandex/cloud/ai/index.ts | 15 +- src/generated/yandex/cloud/api/index.ts | 1 + .../yandex/cloud/apploadbalancer/index.ts | 17 +- src/generated/yandex/cloud/billing/index.ts | 16 +- src/generated/yandex/cloud/cdn/index.ts | 13 +- .../yandex/cloud/certificatemanager/index.ts | 5 +- src/generated/yandex/cloud/compute/index.ts | 36 ++- .../yandex/cloud/containerregistry/index.ts | 17 +- src/generated/yandex/cloud/dataproc/index.ts | 18 +- .../yandex/cloud/datasphere/index.ts | 11 +- .../yandex/cloud/datatransfer/index.ts | 9 +- src/generated/yandex/cloud/dns/index.ts | 3 +- src/generated/yandex/cloud/endpoint/index.ts | 3 +- src/generated/yandex/cloud/iam/index.ts | 22 +- src/generated/yandex/cloud/index.ts | 5 + src/generated/yandex/cloud/iot/index.ts | 10 +- src/generated/yandex/cloud/k8s/index.ts | 11 +- src/generated/yandex/cloud/kms/index.ts | 5 +- .../yandex/cloud/loadbalancer/index.ts | 7 +- src/generated/yandex/cloud/lockbox/index.ts | 6 +- src/generated/yandex/cloud/logging/index.ts | 9 +- .../yandex/cloud/marketplace/index.ts | 3 +- src/generated/yandex/cloud/mdb/index.ts | 163 +++++++--- src/generated/yandex/cloud/oauth/index.ts | 1 + src/generated/yandex/cloud/operation/index.ts | 3 +- .../yandex/cloud/organizationmanager/index.ts | 12 +- src/generated/yandex/cloud/quota/index.ts | 1 + src/generated/yandex/cloud/reference/index.ts | 1 + .../yandex/cloud/resourcemanager/index.ts | 6 +- .../yandex/cloud/serverless/index.ts | 16 +- src/generated/yandex/cloud/service_clients.ts | 282 +++++++++--------- src/generated/yandex/cloud/vpc/index.ts | 15 +- src/generated/yandex/cloud/ydb/index.ts | 15 +- src/session.ts | 4 +- src/token-service/iam-token-service.ts | 4 +- src/utils/operation/wait-for.ts | 2 +- 39 files changed, 646 insertions(+), 450 deletions(-) create mode 100644 src/generated/yandex/cloud/access/index.ts create mode 100644 src/generated/yandex/cloud/api/index.ts create mode 100644 src/generated/yandex/cloud/oauth/index.ts create mode 100644 src/generated/yandex/cloud/quota/index.ts create mode 100644 src/generated/yandex/cloud/reference/index.ts diff --git a/scripts/generate-code.ts b/scripts/generate-code.ts index b865cb63..59cbaf89 100644 --- a/scripts/generate-code.ts +++ b/scripts/generate-code.ts @@ -54,14 +54,14 @@ for (const projectDir of projectsDirs) { logger.debug(`Processing project directory ${projectDir}`); const projectName = path.basename(projectDir); - const servicesModules = fg - .sync('**/*_service.ts', { cwd: projectDir, absolute: true }) + const projectModules = fg + .sync('**/*.ts', { cwd: projectDir, absolute: true }) // Exclude alpha versions .filter((serviceModule) => !/v\d+alpha/.test(serviceModule)); - logger.debug(`Found ${servicesModules.length} service modules`, servicesModules); + logger.debug(`Found ${projectModules.length} modules`, projectModules); - if (servicesModules.length > 0) { + if (projectModules.length > 0) { logger.debug('Generating export statements'); const indexModulePath = path.join(projectDir, 'index.ts'); @@ -71,30 +71,32 @@ for (const projectDir of projectsDirs) { services: [], }; - const exportStatements = servicesModules.map((serviceModulePath) => { - const relativePath = path.relative(projectDir, serviceModulePath); + const exportStatements = projectModules.map((modulePath) => { + const relativePath = path.relative(projectDir, modulePath); const relativePathSegments = relativePath.split(path.sep); - const firstSegment = relativePathSegments[0]; - const serviceModuleName = path.basename(serviceModulePath); - const suffix = serviceModuleName.replace('_service.ts', ''); + const firstPathSegment = relativePathSegments[0]; + const moduleName = path.basename(modulePath).replace('.ts', ''); + const serviceName = moduleName.replace('_service', ''); // Do not use 'vX' as prefixes const usePathSegmentAsPrefix = relativePathSegments.length > 1 - && firstSegment.length > 2 - && firstSegment !== suffix; - const serviceAlias = [ - usePathSegmentAsPrefix ? firstSegment : undefined, - suffix, + && firstPathSegment.length > 2 + && firstPathSegment !== serviceName; + const moduleAlias = [ + usePathSegmentAsPrefix ? firstPathSegment : undefined, + moduleName, ].filter(Boolean).join('_'); - const { ext } = path.parse(serviceModulePath); - const serviceModuleWithoutExt = relativePath.replace(ext, ''); + const { ext } = path.parse(modulePath); + const moduleWithoutExt = relativePath.replace(ext, ''); - projectsMeta[indexModulePath].services.push({ - name: suffix, - exportAlias: serviceAlias, - }); + if (moduleWithoutExt.endsWith('_service')) { + projectsMeta[indexModulePath].services.push({ + name: moduleName, + exportAlias: moduleAlias, + }); + } - return `export * as ${serviceAlias} from './${serviceModuleWithoutExt}'`; + return `export * as ${moduleAlias} from './${moduleWithoutExt}'`; }); const indexModuleContent = exportStatements.join('\n'); @@ -129,7 +131,7 @@ for (const [indexModulePath, projectMeta] of Object.entries(projectsMeta)) { `export const ${serviceConfig.exportClassName || serviceConfig.importClassName} = cloudApi.${projectMeta.name}.${serviceMeta.exportAlias}.${serviceConfig.importClassName};`, ); } else { - logger.warn(`There is no configuration for service ${serviceMeta.name} in project ${projectMeta.name}`); + logger.warn(`There is no configuration for service ${serviceMeta.exportAlias} in project ${projectMeta.name}`); } } } diff --git a/scripts/services.ts b/scripts/services.ts index f3b0c171..5b8faca6 100644 --- a/scripts/services.ts +++ b/scripts/services.ts @@ -3,196 +3,196 @@ type ServicesConfig = Record 'serviceAccountJson' in config; -const createIamToken = async (iamEndpoint: string, req: Partial) => { +const createIamToken = async (iamEndpoint: string, req: Partial) => { const channel = createChannel(iamEndpoint, credentials.createSsl()); const client = clientFactory.create(serviceClients.IamTokenServiceClient.service, channel); - const resp = await client.create(cloudApi.iam.iam_token.CreateIamTokenRequest.fromPartial(req)); + const resp = await client.create(cloudApi.iam.iam_token_service.CreateIamTokenRequest.fromPartial(req)); return resp.iamToken; }; diff --git a/src/token-service/iam-token-service.ts b/src/token-service/iam-token-service.ts index 3f98c0e3..06edef5d 100644 --- a/src/token-service/iam-token-service.ts +++ b/src/token-service/iam-token-service.ts @@ -76,11 +76,11 @@ export class IamTokenService implements TokenService { } } - private async requestToken(): Promise { + private async requestToken(): Promise { const deadline = DateTime.now().plus({ millisecond: this.tokenRequestTimeout }).toJSDate(); return this.client().create( - cloudApi.iam.iam_token.CreateIamTokenRequest.fromPartial({ + cloudApi.iam.iam_token_service.CreateIamTokenRequest.fromPartial({ jwt: this.getJwtRequest(), }), { deadline }, diff --git a/src/utils/operation/wait-for.ts b/src/utils/operation/wait-for.ts index d54296af..bafdc384 100644 --- a/src/utils/operation/wait-for.ts +++ b/src/utils/operation/wait-for.ts @@ -2,7 +2,7 @@ import { Session } from '../../session'; import { Operation } from '../../generated/yandex/cloud/operation/operation'; import { serviceClients, cloudApi } from '../..'; -const { operation: { operation: { GetOperationRequest } } } = cloudApi; +const { operation: { operation_service: { GetOperationRequest } } } = cloudApi; const DEFAULT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes