serverless/lib/plugins/aws/utils/resolve-cf-ref-value.js
2024-05-29 11:51:04 -04:00

30 lines
969 B
JavaScript

import ServerlessError from '../../../serverless-error.js'
async function resolveCfRefValue(provider, resourceLogicalId, sdkParams = {}) {
return provider
.request(
'CloudFormation',
'listStackResources',
Object.assign(sdkParams, { StackName: provider.naming.getStackName() }),
)
.then((result) => {
const targetStackResource = result.StackResourceSummaries.find(
(stackResource) =>
stackResource.LogicalResourceId === resourceLogicalId,
)
if (targetStackResource) return targetStackResource.PhysicalResourceId
if (result.NextToken) {
return resolveCfRefValue(provider, resourceLogicalId, {
NextToken: result.NextToken,
})
}
throw new ServerlessError(
`Could not resolve Ref with name ${resourceLogicalId}. Are you sure this value matches one resource logical ID ?`,
'CF_REF_RESOLUTION',
)
})
}
export default resolveCfRefValue