in packages/@aws-cdk/toolkit-lib/lib/api/cloud-assembly/private/stack-assembly.ts [40:91]
public async selectStacksV2(selector: StackSelector): Promise<StackCollection> {
const asm = this.assembly;
const topLevelStacks = asm.stacks;
const allStacks = major(asm.version) < 10 ? asm.stacks : asm.stacksRecursively;
if (allStacks.length === 0 && (selector.failOnEmpty ?? true)) {
throw new ToolkitError('This app contains no stacks');
}
const extend = expandToExtendEnum(selector.expand);
const patterns = StackAssembly.sanitizePatterns(selector.patterns ?? []);
switch (selector.strategy) {
case StackSelectionStrategy.ALL_STACKS:
return new StackCollection(this, allStacks);
case StackSelectionStrategy.MAIN_ASSEMBLY:
if (topLevelStacks.length < 1) {
// @todo text should probably be handled in io host
throw new ToolkitError('No stack found in the main cloud assembly. Use "list" to print manifest');
}
return this.extendStacks(topLevelStacks, allStacks, extend);
case StackSelectionStrategy.ONLY_SINGLE:
if (topLevelStacks.length !== 1) {
// @todo text should probably be handled in io host
throw new ToolkitError('Since this app includes more than a single stack, specify which stacks to use (wildcards are supported) or specify `--all`\n' +
`Stacks: ${allStacks.map(x => x.hierarchicalId).join(' · ')}`);
}
return new StackCollection(this, topLevelStacks);
default:
const matched = await this.selectMatchingStacks(allStacks, patterns, extend);
if (
selector.strategy === StackSelectionStrategy.PATTERN_MUST_MATCH_SINGLE
&& matched.stackCount !== 1
) {
// @todo text should probably be handled in io host
throw new ToolkitError(
`Stack selection is ambiguous, please choose a specific stack for import [${allStacks.map(x => x.hierarchicalId).join(',')}]`,
);
}
if (
selector.strategy === StackSelectionStrategy.PATTERN_MUST_MATCH
&& matched.stackCount < 1
) {
// @todo text should probably be handled in io host
throw new ToolkitError(
`Stack selection is ambiguous, please choose a specific stack for import [${allStacks.map(x => x.hierarchicalId).join(',')}]`,
);
}
return matched;
}
}