From e66dba93b13ade79c19aa2c0c119df2ddbdd5e38 Mon Sep 17 00:00:00 2001 From: Mark DeCrane Date: Mon, 4 Dec 2023 16:24:43 -0500 Subject: [PATCH] chore: refactor --- packages/@cdktf/hcl2cdk/lib/index.ts | 7 +++- .../lib/get/generator/provider-generator.ts | 41 +++++++++---------- .../lib/get/generator/resource-parser.ts | 21 +++++----- .../provider-schema/src/provider-schema.ts | 9 ++-- 4 files changed, 38 insertions(+), 40 deletions(-) diff --git a/packages/@cdktf/hcl2cdk/lib/index.ts b/packages/@cdktf/hcl2cdk/lib/index.ts index c3495b137d..025978846b 100644 --- a/packages/@cdktf/hcl2cdk/lib/index.ts +++ b/packages/@cdktf/hcl2cdk/lib/index.ts @@ -42,7 +42,7 @@ import { } from "./iteration"; import { getProviderRequirements } from "./provider"; import { logger } from "./utils"; -import { FQPN } from "@cdktf/provider-schema"; +import { FQPN, parseFQPN } from "@cdktf/provider-schema"; import { attributeNameToCdktfName } from "./generation"; import { replaceCsharpImports, @@ -105,7 +105,10 @@ export async function convertToTypescript( new CodeMaker(), providerSchema ); - providerGenerator.buildResourceModels(fqpn as FQPN); // can't use that type on the keys yet, since we are not on TS >=4.4 yet :sadcat: + providerGenerator.buildResourceModels( + fqpn as FQPN, + parseFQPN(fqpn as FQPN).name + ); // can't use that type on the keys yet, since we are not on TS >=4.4 yet :sadcat: return { ...carry, [fqpn]: providerGenerator }; }, {}), constructs: new Set(), diff --git a/packages/@cdktf/provider-generator/lib/get/generator/provider-generator.ts b/packages/@cdktf/provider-generator/lib/get/generator/provider-generator.ts index f01328d53c..6f55aee1b6 100644 --- a/packages/@cdktf/provider-generator/lib/get/generator/provider-generator.ts +++ b/packages/@cdktf/provider-generator/lib/get/generator/provider-generator.ts @@ -69,7 +69,6 @@ export class TerraformProviderGenerator { } public generate(providerConstraint: ConstructsMakerTarget) { - // Alter fqpn with provided name somehow? const fqpn = this.getProviderByConstraint(providerConstraint); if (!fqpn) { logger.debug( @@ -108,7 +107,7 @@ export class TerraformProviderGenerator { public buildResourceModels( fqpn: FQPN, - providedName?: ProviderName + providerName: ProviderName ): ResourceModel[] { const provider = this.schema.provider_schemas?.[fqpn]; if (!provider) { @@ -122,7 +121,7 @@ export class TerraformProviderGenerator { type, resource, "resource", - providedName + providerName ) ); @@ -133,7 +132,7 @@ export class TerraformProviderGenerator { `data_${type}`, resource, "data_source", - providedName + providerName ) ); @@ -153,29 +152,29 @@ export class TerraformProviderGenerator { providerVersion?: string, constraint?: ConstructsMakerTarget ) { - const { name } = parseFQPN(fqpn, constraint); + const { name } = constraint?.name + ? { name: constraint.name as ProviderName } + : parseFQPN(fqpn); const provider = this.schema.provider_schemas?.[fqpn]; if (!provider) { throw new Error(`Can not find provider '${fqpn}' in schema`); } const files: string[] = []; - this.buildResourceModels(fqpn, constraint?.name as ProviderName).forEach( - (resourceModel) => { - if (constraint) { - resourceModel.providerVersionConstraint = constraint.version; - resourceModel.terraformProviderSource = constraint.source; - } - resourceModel.providerVersion = providerVersion; - - if (resourceModel.structsRequireSharding) { - files.push(this.emitResourceWithComplexStruct(resourceModel)); - } else { - files.push(this.emitResource(resourceModel)); - } - this.emitResourceReadme(resourceModel); + this.buildResourceModels(fqpn, name).forEach((resourceModel) => { + if (constraint) { + resourceModel.providerVersionConstraint = constraint.version; + resourceModel.terraformProviderSource = constraint.source; } - ); + resourceModel.providerVersion = providerVersion; + + if (resourceModel.structsRequireSharding) { + files.push(this.emitResourceWithComplexStruct(resourceModel)); + } else { + files.push(this.emitResource(resourceModel)); + } + this.emitResourceReadme(resourceModel); + }); if (provider.provider) { const providerResource = this.resourceParser.parse( @@ -183,7 +182,7 @@ export class TerraformProviderGenerator { `provider`, provider.provider, "provider", - constraint?.name as ProviderName + name ); if (constraint) { providerResource.providerVersionConstraint = constraint.version; diff --git a/packages/@cdktf/provider-generator/lib/get/generator/resource-parser.ts b/packages/@cdktf/provider-generator/lib/get/generator/resource-parser.ts index 2deb6fe88a..84708f6de5 100644 --- a/packages/@cdktf/provider-generator/lib/get/generator/resource-parser.ts +++ b/packages/@cdktf/provider-generator/lib/get/generator/resource-parser.ts @@ -11,7 +11,7 @@ import { isNestedTypeAttribute, Schema, } from "@cdktf/commons"; -import { ProviderName, FQPN, parseFQPN } from "@cdktf/provider-schema"; +import { ProviderName, FQPN } from "@cdktf/provider-schema"; import { ResourceModel, AttributeTypeModel, @@ -124,17 +124,16 @@ class Parser { type: string, schema: Schema, terraformSchemaType: string, - providedName?: ProviderName + providerName: ProviderName ): ResourceModel { - const provider = providedName ? providedName : parseFQPN(fqpn).name; let baseName = type; - if (baseName.startsWith(`${provider}_`)) { - baseName = baseName.substr(provider.length + 1); + if (baseName.startsWith(`${providerName}_`)) { + baseName = baseName.substr(providerName.length + 1); } const isProvider = terraformSchemaType === "provider"; if (isProvider) { - baseName = `${provider}_${baseName}`; + baseName = `${providerName}_${baseName}`; if (!("attributes" in schema.block)) { schema.block = { attributes: {}, @@ -155,16 +154,16 @@ class Parser { const className = this.uniqueClassName(toPascalCase(baseName)); // avoid naming collision - see https://github.com/hashicorp/terraform-cdk/issues/299 const configStructName = this.uniqueClassName(`${className}Config`); - const fileName = getFileName(provider, baseName); + const fileName = getFileName(providerName, baseName); - const filePath = `providers/${toSnakeCase(provider)}/${fileName}`; + const filePath = `providers/${toSnakeCase(providerName)}/${fileName}`; let attributes = this.renderAttributesForBlock( new Scope({ name: baseName, isProvider, parent: isProvider ? undefined - : new Scope({ name: provider, isProvider: true }), + : new Scope({ name: providerName, isProvider: true }), }), schema.block ); @@ -666,7 +665,7 @@ export class ResourceParser { type: string, schema: Schema, terraformType: string, - providedName?: ProviderName + providerName: ProviderName ): ResourceModel { if (this.resources[type]) { return this.resources[type]; @@ -678,7 +677,7 @@ export class ResourceParser { type, schema, terraformType, - providedName + providerName ); this.resources[type] = resource; return resource; diff --git a/packages/@cdktf/provider-schema/src/provider-schema.ts b/packages/@cdktf/provider-schema/src/provider-schema.ts index cd54716b8a..0ab3e2b402 100644 --- a/packages/@cdktf/provider-schema/src/provider-schema.ts +++ b/packages/@cdktf/provider-schema/src/provider-schema.ts @@ -7,7 +7,6 @@ import { convertFiles } from "@cdktf/hcl2json"; import { ConstructsMakerModuleTarget, ConstructsMakerProviderTarget, - ConstructsMakerTarget, Input, ModuleIndex, ModuleSchema, @@ -28,13 +27,11 @@ export type ProviderHostname = string & { __type: "ProviderHostname" }; export type ProviderNamespace = string & { __type: "ProviderNamespace" }; export type ProviderName = string & { __type: "ProviderName" }; -export const parseFQPN = (f: FQPN, constraint?: ConstructsMakerTarget) => { - const [hostname, namespace, sourceName] = f.split("/"); - const providedName = constraint?.name; - if (!sourceName && !providedName) { +export const parseFQPN = (f: FQPN) => { + const [hostname, namespace, name] = f.split("/"); + if (!name) { throw new Error(`can't handle ${f}`); } - const name = providedName ? providedName : sourceName; return { hostname, namespace, name } as { hostname: ProviderHostname; namespace: ProviderNamespace;