in packages/aws-arch/scripts/aws-arch/generate-mappings.ts [36:115]
export async function generate () {
const services: CfnServiceMapping = {} as any;
const drawioMapping = generateDrawioShapeToAssetMapping();
const drawioLookup = Object.fromEntries(Object.entries(drawioMapping).reverse().map(([k, v]) => v === false ? [] : [v,DrawioSpec.Aws4.ShapeNames[k as keyof typeof DrawioSpec.Aws4.ShapeNames]]))
const counts = {
missingResourceAsset: 0,
missingServiceAsset: 0,
noAsset: 0,
missingPricingServiceCode: 0,
}
const resources = Object.fromEntries(CfnSpec.ResourceTypes.map((cfnType) => {
const { provider, serviceName } = parseCfnType(cfnType);
const cfnAssets = findCfnTypeAssets(cfnType);
if (!(serviceName in services)) {
services[serviceName] = {
provider,
pricingServiceCode: findPricingServiceCode(serviceName, cfnAssets.serviceName),
assetKey: cfnAssets.serviceName,
drawioShape: cfnAssets.serviceName && drawioLookup[AwsAsset.Services[cfnAssets.serviceName]],
}
if (cfnAssets.serviceName == null) {
counts.missingServiceAsset++;
}
if (services[serviceName].pricingServiceCode == null) {
counts.missingPricingServiceCode++;
}
}
const service: CfnMappedService = services[serviceName];
const resource: CfnMappedResource = {
service: serviceName,
serviceAssetKey: cfnAssets.serviceName,
assetKey: cfnAssets.resourceName,
generalIconKey: cfnAssets.generalIcon,
drawioShape: cfnAssets.resourceName && drawioLookup[AwsAsset.Resources[cfnAssets.resourceName]],
drawioGeneralShape: cfnAssets.generalIcon && drawioLookup[AwsAsset.GeneralIcons[cfnAssets.generalIcon]],
}
if (resource.assetKey == null && resource.generalIconKey == null) {
counts.missingResourceAsset++;
if (service.assetKey === null) {
counts.noAsset++;
}
}
return [cfnType, resource]
})) as unknown as CfnResourceMapping
/** eslint-disable */
const mappingTs = `// AUTO-GENERATED - DO NOT EDIT
/* eslint-disable */
/** @internal */
export const AwsServiceMapping = ${JSON.stringify(services, null, 2)} as const;
/** @internal */
export const AwsResourceMapping = ${JSON.stringify(resources, null, 2)} as const;
/** @internal */
export const DrawioShapeToAssetMapping = ${JSON.stringify(drawioMapping, null, 2)} as const;
`
/** eslint-enable */
await fs.writeFile(MAPPINGS_TS, mappingTs, { encoding: 'utf-8' })
const missingDrawioShapesList = Object.entries(drawioMapping).filter(([,v]) => v === false).map(([k]) => DrawioSpec.Aws4.ShapeNames[k as keyof typeof DrawioSpec.Aws4.ShapeNames]);
console.warn('Drawio[missing]:', missingDrawioShapesList.join(', '), '\n');
logCount('Drawio[assets]', DrawioSpec.Aws4.ShapeNames, missingDrawioShapesList, true);
logCount('Services[assets]', services, counts.missingServiceAsset, true);
logCount('Services[pricing]', services, counts.missingPricingServiceCode, true);
logCount('Resources[manifest]', resources, counts.missingPricingServiceCode, true);
logCount('Resources[assets]', resources, counts.missingResourceAsset, true);
}