export async function generate()

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);
}