import type {StatsCompilation} from '@roots/bud-framework/config'
import Assets from '@roots/bud-dashboard/components/assets'
import {useCompilationColor} from '@roots/bud-dashboard/hooks/useCompilationColor'
import figures from '@roots/bud-support/figures'
import {size as formatSize} from '@roots/bud-support/human-readable'
import {Box, Text} from '@roots/bud-support/ink'
export interface Props {
compact?: boolean
compilation?: StatsCompilation
displayAssets?: boolean
limit?: number
}
export default function CompilationAssets({
compact,
compilation,
displayAssets,
limit = 5,
}: Props) {
const compilationColor = useCompilationColor(compilation, `cyan`)
if (!displayAssets) return null
if (!compilation?.assets) return null
const filteredAssets = [...compilation.assets]
.sort((a, b) => {
if (a.size < b.size) return 1
if (a.size > b.size) return -1
return 0
})
.sort((a, b) => {
if (a.emitted && !b.emitted) return -1
if (!a.emitted && b.emitted) return 1
return 0
})
.filter(
asset =>
!asset.name?.endsWith(`js`) &&
!asset.name?.endsWith(`css`) &&
!asset.name?.endsWith(`map`) &&
!asset.name?.endsWith(`json`),
)
const assets = filteredAssets.splice(limit * -1)
if (assets.length === 0) return null
const hiddenCount = compilation.assets.length - assets.length
return compact ? (
assets
{assets.length} modules
{`${formatSize(
assets.reduce((acc, asset) => acc + asset.size, 0),
)}`}
) : (
{`assets`}
{hiddenCount > 0 && (
{` ${figures.ellipsis} ${hiddenCount} additional ${
hiddenCount > 1 ? `assets` : `asset`
} not shown`}
)}
)
}