in src/cfn-registry.ts [33:82]
export async function describeResourceType(name: string, options: DescribeResourceTypeOptions = {}): Promise<TypeInfo> {
const visibility = options.private ? 'PRIVATE' : 'PUBLIC';
const cfn = options.client ?? new CloudFormationClient();
let typeArn;
if (name.startsWith('arn:')) {
typeArn = name;
} else {
const types = [];
let token;
do {
const res: AWS.CloudFormation.ListTypesOutput = await cfn.listTypes({
NextToken: token,
Type: name.endsWith('MODULE') ? 'MODULE' : 'RESOURCE',
Filters: {
TypeNamePrefix: name,
},
Visibility: visibility,
});
if (res.TypeSummaries) {
types.push(...res.TypeSummaries);
}
token = res.NextToken;
} while (token);
if (types.length !== 1) {
throw new Error('Cannot find unique CloudFormation Type ' + name);
}
typeArn = types[0].TypeArn;
}
const type = await cfn.describeType({
Arn: typeArn,
// TODO versioning
});
if (!type.Schema) {
throw new Error('CloudFormation Type ' + name + ' does not contain schema');
}
if (!type.TypeName) {
throw new Error('CloudFormation Type ' + name + ' does not contain a type name');
}
return {
TypeName: type.TypeName,
Schema: type.Schema,
SourceUrl: type.SourceUrl ?? type.Arn!,
};
}