From 058dc516063fb44809bc1e20ba1c4c444866fbf0 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Tue, 25 Mar 2025 18:02:13 +0100 Subject: [PATCH] feat: review build output --- src/services/build/build.javascript.ts | 16 ++++------------ src/services/build/build.rust.services.ts | 12 ++++-------- src/services/build/build.services.ts | 4 ++-- src/utils/format.utils.ts | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 src/utils/format.utils.ts diff --git a/src/services/build/build.javascript.ts b/src/services/build/build.javascript.ts index 077cc369..a510f644 100644 --- a/src/services/build/build.javascript.ts +++ b/src/services/build/build.javascript.ts @@ -1,5 +1,5 @@ import {buildEsm, execute} from '@junobuild/cli-tools'; -import {magenta, red, yellow} from 'kleur'; +import {green, magenta, red, yellow} from 'kleur'; import {mkdir} from 'node:fs/promises'; import {join} from 'node:path'; import { @@ -10,6 +10,7 @@ import { INDEX_TS } from '../../constants/dev.constants'; import type {BuildArgs, BuildLang} from '../../types/build'; +import {formatBytes, formatTime} from '../../utils/format.utils'; import {detectPackageManager} from '../../utils/pm.utils'; import {confirmAndExit} from '../../utils/prompt.utils'; @@ -61,17 +62,8 @@ const buildWithEsbuild = async ({lang, path}: BuildArgsTsJs) => { const [key, {bytes}] = entry[0]; - const unit = bytes >= 1000 ? 'megabyte' : 'kilobyte'; - - const formatter = new Intl.NumberFormat('en', { - style: 'unit', - unit - }); - - console.log(`✅ Build complete (esbuild ${version}).`); - console.log( - `➡️ ${key} (${formatter.format(bytes / (unit === 'megabyte' ? 1_000_000 : 1_000))})` - ); + console.log(`${green('✔')} Build complete at ${formatTime()} (esbuild ${version})`); + console.log(`→ ${yellow(key)} (${formatBytes(bytes)})`); }; const createTargetDir = async () => { diff --git a/src/services/build/build.rust.services.ts b/src/services/build/build.rust.services.ts index b5e436a3..caa7780c 100644 --- a/src/services/build/build.rust.services.ts +++ b/src/services/build/build.rust.services.ts @@ -1,7 +1,7 @@ import {nonNullish} from '@dfinity/utils'; import {execute, gzipFile, spawn} from '@junobuild/cli-tools'; import {generateApi} from '@junobuild/did-tools'; -import {green, grey, magenta, yellow} from 'kleur'; +import {magenta, yellow} from 'kleur'; import {existsSync} from 'node:fs'; import {lstat, mkdir, readFile, rename, writeFile} from 'node:fs/promises'; import {join, relative} from 'node:path'; @@ -16,6 +16,7 @@ import { import type {BuildArgs} from '../../types/build'; import {readSatelliteDid} from '../../utils/did.utils'; import {checkCargoBinInstalled, checkIcWasmVersion, checkRustVersion} from '../../utils/env.utils'; +import {formatBytes, formatTime} from '../../utils/format.utils'; import {confirmAndExit} from '../../utils/prompt.utils'; const CARGO_RELEASE_DIR = join(process.cwd(), 'target', 'wasm32-unknown-unknown', 'release'); @@ -287,15 +288,10 @@ const successMsg = async (spinner: Ora) => { const gzipOutput = `${SATELLITE_OUTPUT}.gz`; const {size} = await lstat(gzipOutput); - const formatMB = (value: number): string => - Intl.NumberFormat('en-US', { - maximumSignificantDigits: 2 - }).format(value / (1024 * 1024)); - spinner.succeed( - `${green('Success!')}\n\nThe satellite has been compiled.\nOutput file: ${yellow( + `Build complete at ${formatTime()}\n→ Output file: ${yellow( relative(process.cwd(), gzipOutput) - )} ${grey(`(${formatMB(size)}MB)`)}` + )} (${formatBytes(size)})` ); }; diff --git a/src/services/build/build.services.ts b/src/services/build/build.services.ts index ee719ef6..d76cd1bb 100644 --- a/src/services/build/build.services.ts +++ b/src/services/build/build.services.ts @@ -88,7 +88,7 @@ const executeBuild = async ({lang, path}: Omit) => { const watchBuild = ({watch, path, ...params}: BuildArgs) => { const doBuild = async () => { - console.log('Rebuilding serverless functions...'); + console.log(`\n⏱ Rebuilding serverless functions...`); await executeBuild({path, ...params}); }; @@ -105,7 +105,7 @@ const watchBuild = ({watch, path, ...params}: BuildArgs) => { const watchPath = nonNullish(path) ? dirname(path) : DEVELOPER_PROJECT_SATELLITE_PATH; console.log(SMALL_TITLE); - console.log('👀 Watching for file changes.'); + console.log('👀 Watching for file changes'); chokidar .watch(watchPath, { diff --git a/src/utils/format.utils.ts b/src/utils/format.utils.ts new file mode 100644 index 00000000..6620b25c --- /dev/null +++ b/src/utils/format.utils.ts @@ -0,0 +1,19 @@ +export const formatBytes = (bytes: number): string => { + const unit = bytes >= 1000 ? 'megabyte' : 'kilobyte'; + + const formatter = new Intl.NumberFormat('en', { + style: 'unit', + unit + }); + + return formatter.format(bytes / (unit === 'megabyte' ? 1_000_000 : 1_000)); +}; + +export const formatTime = (date: Date = new Date()): string => { + return new Intl.DateTimeFormat('en', { + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false + }).format(date); +};