diff --git a/packages/next/export/index.ts b/packages/next/export/index.ts index fcd2edfc1edaecfaab98e0c2d063dc50cfd72856..24c69ee2844ce14c913348ef76e8f2a914c2376a 100644 --- a/packages/next/export/index.ts +++ b/packages/next/export/index.ts @@ -46,7 +46,22 @@ import { getPagePath } from '../next-server/server/require' const exists = promisify(existsOrig) +function divideSegments(number: number, segments: number): number[] { + const result = [] + while (number > 0 && segments > 0) { + const dividedNumber = Math.floor(number / segments) + number -= dividedNumber + segments-- + result.push(dividedNumber) + } + return result +} + const createProgress = (total: number, label = 'Exporting') => { + const segments = divideSegments(total, 4) + + let currentSegmentTotal = segments.shift() + let currentSegmentCount = 0 let curProgress = 0 let progressSpinner = createSpinner(`${label} (${curProgress}/${total})`, { spinner: { @@ -73,6 +88,15 @@ const createProgress = (total: number, label = 'Exporting') => { return () => { curProgress++ + currentSegmentCount++ + + // Make sure we only log once per fully generated segment + if (currentSegmentCount !== currentSegmentTotal) { + return + } + + currentSegmentTotal = segments.shift() + currentSegmentCount = 0 const newText = `${label} (${curProgress}/${total})` if (progressSpinner) {