/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/@cdktf/hcl2cdk@0.21.0/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,n)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&__createBinding(r,e,t);return __setModuleDefault(r,e),r},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.attributeNameToCdktfName=exports.isRegistryModule=exports.convertProject=exports.getTerraformConfigFromDir=exports.convert=exports.convertToTypescript=exports.parseProviderRequirements=exports.getParsedHcl=exports.CODE_MARKER=void 0;const hcl2json_1=require("@cdktf/hcl2json"),provider_generator_1=require("@cdktf/provider-generator");Object.defineProperty(exports,"isRegistryModule",{enumerable:!0,get:function(){return provider_generator_1.isRegistryModule}});const t=__importStar(require("@babel/types")),prettier_1=__importDefault(require("prettier")),path=__importStar(require("path")),glob=__importStar(require("glob")),fs=__importStar(require("fs")),graphology_1=require("graphology"),rosetta=__importStar(require("jsii-rosetta")),schema_1=require("./schema"),references_1=require("./references"),generation_1=require("./generation"),iteration_1=require("./iteration"),provider_1=require("./provider"),utils_1=require("./utils"),generation_2=require("./generation");Object.defineProperty(exports,"attributeNameToCdktfName",{enumerable:!0,get:function(){return generation_2.attributeNameToCdktfName}});const jsii_rosetta_workarounds_1=require("./jsii-rosetta-workarounds"),iteration_2=require("./iteration");async function getParsedHcl(e){let r,t;utils_1.logger.debug(`Parsing HCL: ${e}`);try{r=await(0,hcl2json_1.parse)("terraform.tf",e)}catch(e){throw utils_1.logger.error(`Failed to parse HCL: ${e}`),new Error("Error: Could not parse HCL, this means either that the HCL passed is invalid or that you found a bug. If the HCL seems valid, please file a bug under https://cdk.tf/bugs/new/convert")}try{t=schema_1.schema.parse(r)}catch(e){throw new Error(`Error: HCL-JSON does not conform to schema. This is not expected, please file a bug under https://cdk.tf/bugs/new/convert\nPlease include this information:\n${JSON.stringify(e.errors)}`)}return t}async function parseProviderRequirements(e){utils_1.logger.debug("Parsing provider requirements");const r=await getParsedHcl(e);return(0,provider_1.getProviderRequirements)(r)}async function convertToTypescript(e,r,o){var n;utils_1.logger.debug("Converting to typescript");const i=await getParsedHcl(e),a={providerSchema:r,providerGenerator:Object.keys(r.provider_schemas||{}).reduce(((e,t)=>{const o=new provider_generator_1.TerraformProviderGenerator(new provider_generator_1.CodeMaker,r);return o.buildResourceModels(t),{...e,[t]:o}}),{}),constructs:new Set,variables:{},hasTokenBasedTypeCoercion:!1,nodeIds:[],importables:[],topLevelConfig:{}},s=new graphology_1.DirectedGraph,c={...(0,iteration_1.forEachProvider)(a,i.provider,generation_1.provider),...(0,iteration_1.forEachGlobal)(a,"var",i.variable,generation_1.variable),...(0,iteration_1.forEachGlobal)(a,"local",Array.isArray(i.locals)?i.locals.reduce(((e,r)=>({...e,...r})),{}):{},generation_1.local),...(0,iteration_1.forEachGlobal)(a,"out",i.output,generation_1.output),...(0,iteration_1.forEachGlobal)(a,"module",i.module,generation_1.modules),...(0,iteration_2.forEachImport)(a,"import",i.import,generation_1.imports),...(0,iteration_1.forEachNamespaced)(a,i.resource,generation_1.resource),...(0,iteration_1.forEachNamespaced)(a,i.data,generation_1.resource,"data")};Object.entries(c).forEach((([e,r])=>{utils_1.logger.debug(`Adding node '${e}' to graph`),s.addNode(e,r)}));const l=Object.keys(c);async function d(e,r){(await(0,references_1.findUsedReferences)(l,r)).forEach((r=>{if(!s.hasDirectedEdge(r.referencee.id,e)&&s.hasNode(r.referencee.id)){if(!s.hasNode(e))throw new Error(`The dependency graph is expected to link from ${r.referencee.id} to ${e} but ${e} does not exist.\n            These nodes exist: ${s.nodes().join("\n")}`);if(e===r.referencee.id)return void utils_1.logger.debug(`Skipping self-reference for ${e}`);utils_1.logger.debug(`Adding edge from ${r.referencee.id} to ${e}`),s.addDirectedEdge(r.referencee.id,e,{ref:r})}}))}async function u(e,r,t,o){await d(t,o)}async function g(e,r,t,o,n){await d(o,n)}a.nodeIds=l,await Promise.all(Object.values({...(0,iteration_1.forEachProvider)(a,i.provider,(async function(e,r,t,o){await d(t,o)})),...(0,iteration_1.forEachGlobal)(a,"var",i.variable,u),...(0,iteration_1.forEachGlobal)(a,"local",Array.isArray(i.locals)?i.locals.reduce(((e,r)=>({...e,...r})),{}):{},u),...(0,iteration_1.forEachGlobal)(a,"out",i.output,u),...(0,iteration_1.forEachGlobal)(a,"module",i.module,u),...(0,iteration_1.forEachNamespaced)(a,i.resource,g),...(0,iteration_1.forEachNamespaced)(a,i.data,g,"data")}).map((({code:e})=>e(s)))),utils_1.logger.debug(`Graph: ${JSON.stringify(s,null,2)}`),utils_1.logger.debug("Starting to assemble the typescript code");const p=[];let f=[...l],_=0;do{_=0;const e=s.mapNodes(((e,{code:r})=>{if(!f.includes(e))return;return 0===s.inNeighbors(e).filter((e=>f.includes(e))).length?(f=f.filter((r=>e!==r)),_+=1,utils_1.logger.debug(`Visiting node ${e}`),r):void 0}));for(const r of e)r&&p.push(...await r(s));utils_1.logger.debug(`${f.length} unvisited nodes: ${f.join(", ")}`)}while(f.length>0&&0!=_);if(f.length>0)throw new Error(`There are ${f.length} terraform elements that could not be visited.\n      This is likely due to a cycle in the dependency graph.\n      These nodes are: ${f.join(", ")}`);utils_1.logger.debug(`${f.length} unvisited nodes: ${f.join(", ")}`);const m=(await Promise.all((null===(n=i.terraform)||void 0===n?void 0:n.map((e=>(0,generation_1.backendToExpression)(a,e.backend))))||[Promise.resolve([])])).reduce(((e,r)=>[...e,...r]),[]);utils_1.logger.debug(`Using these backend expressions: ${JSON.stringify(m,null,2)}`);const h=[...new Set(Object.values(i.module||{}).reduce(((e,r)=>[...e,...r.reduce(((e,{source:r,version:t})=>[...e,t?`${r}@${t}`:r]),[])]),[])||[])];utils_1.logger.debug(`Found these modules: ${JSON.stringify(h,null,2)}`),Object.keys(i.variable||{}).length>0&&p.length>0&&(p[0]=t.addComment(p[0],"leading","Terraform Variables are not always the best fit for getting inputs in the context of Terraform CDK.\nYou can read more about this at https://cdk.tf/variables"));const v=(0,provider_1.getProviderRequirements)(i);utils_1.logger.debug(`Found these provider requirements: ${JSON.stringify(v,null,2)}`);const b=Object.keys(v).filter((e=>"terraform"!==e&&!Object.keys(r.provider_schemas||{}).some((r=>r.endsWith(e)))));utils_1.logger.debug(`${b.length} providers lack schema information: ${b.join(", ")}`),b.length>0&&(p[0]=t.addComment(p[0],"leading",`The following providers are missing schema information and might need manual adjustments to synthesize correctly: ${b.join(", ")}.\nFor a more precise conversion please use the --provider flag in convert.`)),a.importables.push({constructName:"Construct",provider:"constructs"}),a.hasTokenBasedTypeCoercion&&a.importables.push({constructName:"Token",provider:"cdktf"}),(0,generation_1.addImportForCodeContainer)(a,o);const y=(0,generation_1.buildImports)(a.importables),w=[...m||[],...p],j=Object.keys(a.topLevelConfig).length>0?"MyConfig":void 0,T=j?[(0,generation_1.generateConfigType)(j,a.topLevelConfig)]:[];return{all:await(0,generation_1.gen)([...y,...(0,generation_1.moduleImports)(i.module),...T,(0,generation_1.wrapCodeInConstructor)(o,w,"MyConvertedCode",j)]),imports:await(0,generation_1.gen)([...y,...(0,generation_1.moduleImports)(i.module)]),code:await(0,generation_1.gen)(w),providers:Object.entries(v).map((([e,r])=>"*"===r?e:`${e}@${r}`)),modules:h,stats:{numberOfModules:h.length,numberOfProviders:Object.keys(v).length,resources:(0,iteration_1.resourceStats)(i.resource||{}),data:(0,iteration_1.resourceStats)(i.data||{}),convertedLines:e.split("\n").length}}}exports.CODE_MARKER="// define resources here",exports.getParsedHcl=getParsedHcl,exports.parseProviderRequirements=parseProviderRequirements,exports.convertToTypescript=convertToTypescript;const translators={python:{visitor:()=>new rosetta.PythonVisitor,postTranslationMutation:jsii_rosetta_workarounds_1.replacePythonImports},java:{visitor:()=>new rosetta.JavaVisitor,postTranslationMutation:jsii_rosetta_workarounds_1.replaceJavaImports},csharp:{visitor:()=>new rosetta.CSharpVisitor,postTranslationMutation:jsii_rosetta_workarounds_1.replaceCsharpImports},go:{visitor:()=>new rosetta.GoVisitor,postTranslationMutation:jsii_rosetta_workarounds_1.replaceGoImports}};function translatorForLanguage(e){return(r,t)=>{const{visitor:o,postTranslationMutation:n}=translators[e],{translation:i,diagnostics:a}=rosetta.translateTypeScript(r,o(),t?{includeCompilerDiagnostics:!0}:{});if(t&&a.filter((e=>e.isError)).length>0)throw utils_1.logger.debug(`Could not translate TS to ${e}:\n${r.contents}`),new Error(`Could not translate TS to ${e}: ${a.map((e=>e.formattedMessage)).join("\n")}`);return n(i)}}async function convert(e,{language:r,providerSchema:t,throwOnTranslationError:o=!1,codeContainer:n="cdktf.TerraformStack"}){const i="terraform.tf",a="typescript"===r?(e,r)=>e.contents:translatorForLanguage(r);if(!a)throw new Error("Unsupported language used: "+r);const s=await convertToTypescript(e,t,n);return{...s,all:a({fileName:i,contents:s.all},o),imports:a({fileName:i,contents:s.imports},!1),code:a({fileName:i,contents:s.code},!1),stats:{...s.stats,language:r}}}function getTerraformConfigFromDir(e){const r=path.resolve(e);return glob.sync("./*.tf",{cwd:r}).map((e=>fs.readFileSync(path.resolve(r,e),"utf8"))).join("\n")}async function convertProject(e,{language:r,providerSchema:t}){if("typescript"!==r)throw new Error("Unsupported language used: "+r);const{imports:o,code:n,providers:i,modules:a,stats:s}=await convert(e,{language:r,providerSchema:t});return{code:e=>{const r=[o,e].join("\n").replace(exports.CODE_MARKER,n);return prettier_1.default.format(r,{parser:"babel"})},cdktfJson:e=>{const r={...e};return r.terraformProviders=i,r.terraformModules=a,r},stats:s}}exports.convert=convert,exports.getTerraformConfigFromDir=getTerraformConfigFromDir,exports.convertProject=convertProject;
//# sourceMappingURL=/sm/a1f7512f3b7695a068bc9296209d4d779ab329c5ff8a452fea0f81351eb5b700.map