Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(core): cross-stack references to NestedStack list values produces…
… invalid outputs (#32575) ### Issue # Closes #27233. ### Reason for this change Referencing a list attribute of a resource defined within a `NestedStack` synthesizes successfully but the nested stack will fail deployment with the error: ``` Template format error: Every Value member must be a string. ``` This prevents deploying resources into a `NestedStack` instance if a reference to one of that resource's list attribute exists within a cross-stack context. For example, deploying a `InterfaceVpcEndpoint` instance in a nested stack and attempting to reference its `vpcEndpointDnsEntries` property within a different stack will cause this error. See new integration test at `packages/@aws-cdk-testing/framework-integ/test/core/test/integ.nested-stack-references.ts` for minimal reproduction. ### Description of changes A similar strategy to `exportStringListValue` is used to serialized the reference's values into a string and expose that value as the output from the nested stack. The reference to the serialized value is then made exportable as normally needed to hoist it to the top-level parent stack. The final reference that imports the value is then re-written to also deserialize the imported string back to the original list. The return types of some internal methods were modified to handle the fact that core/lib/private/refs.ts's `getExportable` no longer *necessarily* returns a Reference. This was needed because an exportable may now be a value derived from a reference instead of only a direct reference. ### Describe any new or updated permissions being added N/A ### Description of how you validated changes * Added unit test to verify low-level operation * Added integration test to verify high-level behavior and deploy-ability * Executed integration test within a personal account to verify success ### Checklist - [X] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
- Loading branch information