_includes/logos/Logo.11ty.tsx (49 lines of code) (raw):

import fs from "fs"; import path from "upath"; const svgCache = new Map<string, string>(); let getResizedSvgContent = function ( product: string, variant?: string, width?: number, height?: number ): string { let svgContent = getSvgContent(product, variant); if (width && height) { svgContent = svgContent.replace( 'width="70" height="70"', `width=\"${width}\" height=\"${height}\"` ); } return svgContent; }; let getSvgContent = function (product: string, variant?: string): string { if (svgCache.has(product + "_" + variant)) { return svgCache.get(product + "_" + variant) as string; } let relativeFilePath = variant ? path.join( "node_modules", "@jetbrains", "logos", product, `${product}-${variant}.svg` ) : path.join( "node_modules", "@jetbrains", "logos", product, `${product}.svg` ); let data = fs.readFileSync(relativeFilePath).toString("utf8"); svgCache.set(product + "_" + variant, data); return data; }; export type IconProps = { product: string; variant?: string; width?: number; height?: number; }; const Logo = ({ product, variant, width, height }: IconProps): JSX.Element => { return <span>{getResizedSvgContent(product, variant, width, height)}</span>; }; export default Logo;