import path from 'path' /** * Generates a single asset module */ export function generateAssetModule( componentName: string, optimizedAssetPath: string, assetType: { type: 'svg' | 'image', animated: boolean, category?: string, dimensions?: { width: number, height: number } }, originalFileName: string ) { // Use relative path from the generated TypeScript file to the optimized asset const relativePath = `./assets/${path.basename(optimizedAssetPath)}` if (assetType.category === 'animation') { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return generateAnimatedAsset(componentName, relativePath, originalFileName, assetType.dimensions!) } else if (assetType.type === 'svg') { return generateSvgAsset(componentName, relativePath, originalFileName) } else { return generateImageAsset(componentName, relativePath, originalFileName, assetType.animated) } } /** * Generates SVG asset module */ function generateSvgAsset(componentName: string, relativePath: string, originalFileName: string) { return `// AUTO-GENERATED FILE. DO NOT EDIT. // Source: ${originalFileName} import svgUrl from '${relativePath}' import type { IllustrationAsset, BaseSvgAsset } from './types' export type ${componentName}Asset = IllustrationAsset /** * ${componentName} illustration asset * @example * \`\`\`tsx * import { Illustration } from '@payfit/unity-illustrations' * import ${componentName} from '@payfit/unity-illustrations/assets/${componentName}' * * * \`\`\` */ const ${componentName}: ${componentName}Asset = { type: 'svg', url: svgUrl, animated: false, name: '${componentName}', } as ${componentName}Asset export default ${componentName} ` } /** * Generates animated asset module */ function generateAnimatedAsset( componentName: string, relativePath: string, originalFileName: string, dimensions: { width: number, height: number } ) { return `// AUTO-GENERATED FILE. DO NOT EDIT. // Source: ${originalFileName} (Animated WEBP - ${dimensions.width}x${dimensions.height}) import assetUrl from '${relativePath}' import type { IllustrationAsset, BaseAnimatedImageAsset } from './types' export type ${componentName}Asset = IllustrationAsset /** * ${componentName} animated illustration asset (${dimensions.width}x${dimensions.height}) * @example * \`\`\`tsx * import { Illustration } from '@payfit/unity-illustrations' * import ${componentName} from '@payfit/unity-illustrations/assets/${componentName}' * * * \`\`\` */ const ${componentName}: ${componentName}Asset = { type: 'image', url: assetUrl, animated: true, dimensions: { width: ${dimensions.width}, height: ${dimensions.height} }, category: 'animation', name: '${componentName}', } as ${componentName}Asset export default ${componentName} ` } /** * Generates image asset module */ function generateImageAsset(componentName: string, relativePath: string, originalFileName: string, animated: boolean) { return `// AUTO-GENERATED FILE. DO NOT EDIT. // Source: ${originalFileName} import assetUrl from '${relativePath}' import type { IllustrationAsset, BaseImageAsset } from './types' export type ${componentName}Asset = IllustrationAsset /** * ${componentName} illustration asset * @example * \`\`\`tsx * import { Illustration } from '@payfit/unity-illustrations' * import ${componentName} from '@payfit/unity-illustrations/assets/${componentName}' * * * \`\`\` */ const ${componentName}: ${componentName}Asset = { type: 'image', url: assetUrl, animated: ${animated}, name: '${componentName}', } as ${componentName}Asset export default ${componentName} ` }