UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 1.63 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.renderData=void 0;var core_1=()=>{var tmp=require("../../core");return core_1=()=>tmp,tmp};function renderData(scope,data){const obj=core_1().Stack.of(scope).resolve(data);if(typeof obj=="string")return{text:obj,markers:{}};if(typeof obj!="object")throw new Error(`Unexpected: after resolve() data must either be a string or a CloudFormation intrinsic. Got: ${JSON.stringify(obj)}`);let markerIndex=0;const markers={},result=new Array,fnJoin=obj["Fn::Join"];if(fnJoin){const sep=fnJoin[0],parts=fnJoin[1];if(sep!=="")throw new Error(`Unexpected "Fn::Join", expecting separator to be an empty string but got "${sep}"`);for(const part of parts){if(typeof part=="string"){result.push(part);continue}if(typeof part=="object"){addMarker(part);continue}throw new Error(`Unexpected "Fn::Join" part, expecting string or object but got ${typeof part}`)}}else if(obj.Ref||obj["Fn::GetAtt"]||obj["Fn::Select"])addMarker(obj);else throw new Error('Unexpected: Expecting `resolve()` to return "Fn::Join", "Ref" or "Fn::GetAtt"');function addMarker(part){const keys=Object.keys(part),acceptedCfnFns=["Ref","Fn::GetAtt","Fn::Select"];if(keys.length!==1||!acceptedCfnFns.includes(keys[0])){const stringifiedAcceptedCfnFns=acceptedCfnFns.map(fn=>`"${fn}"`).join(" or ");throw new Error(`Invalid CloudFormation reference. Key must start with any of ${stringifiedAcceptedCfnFns}. Got ${JSON.stringify(part)}`)}const marker=`<<marker:0xbaba:${markerIndex++}>>`;result.push(marker),markers[marker]=part}return{text:result.join(""),markers}}exports.renderData=renderData;