@roots/bud-dashboard
Version:
bud.js core module
33 lines (32 loc) • 2.34 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "@roots/bud-support/jsx-runtime";
import Assets from '@roots/bud-dashboard/components/assets';
import { useCompilationColor } from '@roots/bud-dashboard/hooks/useCompilationColor';
import { longestNamedObjectLength } from '@roots/bud-dashboard/hooks/useLongestNamedObjectLength';
import { size as formatSize } from '@roots/bud-support/human-readable';
import { Box, Text } from '@roots/bud-support/ink';
import isNumber from '@roots/bud-support/isNumber';
const Entrypoints = ({ compact, compilation, displayEntrypoints, }) => {
const compilationColor = useCompilationColor(compilation, `cyan`);
if (!displayEntrypoints)
return null;
if (!compilation?.entrypoints)
return null;
const entrypoints = Object.values(compilation.entrypoints)
.map(entrypoint => ({
...entrypoint,
assets: entrypoint.assets
?.filter(asset => !asset?.name?.includes(`hot-update`))
.map(asset => ({
...(asset ?? {}),
...(compilation?.assets?.find(a => a?.name === asset?.name) ??
{}),
})) ?? [],
}))
.filter(({ assets }) => assets.length > 0);
const minWidth = entrypoints.reduce((longest, entry) => Math.max(entry.assets ? longestNamedObjectLength(entry.assets) : 0, longest), 0);
if (entrypoints.length === 0)
return null;
return entrypoints.map(({ assets, name }, key) => (_jsx(Box, { flexDirection: "column", children: compact ? (_jsxs(Box, { flexDirection: "row", flexWrap: "wrap", justifyContent: "space-between", children: [name && _jsx(Text, { color: compilationColor, children: name }), _jsxs(Box, { flexDirection: "row", flexWrap: "wrap", gap: 2, children: [_jsxs(Text, { children: [assets.length, " modules"] }), _jsx(Text, { children: `${formatSize(assets.reduce((acc, asset) => acc +
(asset?.size && isNumber(asset.size) ? asset.size : 0), 0))}` })] })] })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { flexDirection: "row", flexWrap: "wrap", justifyContent: "space-between", children: name && name !== compilation.name && (_jsx(Text, { color: compilationColor, children: name })) }), _jsx(Assets, { assets: assets, minWidth: minWidth })] }, key)) }, key)));
};
export { Entrypoints as default };