diff --git a/packages/app/src/cli/services/dev/processes/dev-session.ts b/packages/app/src/cli/services/dev/processes/dev-session.ts index c7ff3a3c729..c286df51df2 100644 --- a/packages/app/src/cli/services/dev/processes/dev-session.ts +++ b/packages/app/src/cli/services/dev/processes/dev-session.ts @@ -147,6 +147,15 @@ export const pushUpdatesForDevSession: DevProcessFunction = a ) }) .onStart(async (event) => { + const buildErrors = event.extensionEvents.filter((eve) => eve.buildResult?.status === 'error') + if (buildErrors.length) { + const errors = buildErrors.map((error) => ({ + error: 'Build error. Please review your code and try again.', + prefix: error.extension.handle, + })) + await printMultipleErrors(errors, processOptions.stdout) + throw new AbortError('Dev session aborted, build errors detected in extensions.') + } const result = await bundleExtensionsAndUpload({...processOptions, app: event.app}) await handleDevSessionResult(result, {...processOptions, app: event.app}) }) @@ -335,6 +344,16 @@ async function printError(message: string, stdout: Writable, prefix?: string) { await printLogMessage(outputContent`${content}`.value, stdout, prefix) } +async function printMultipleErrors(errors: {error: string; prefix: string}[], stdout: Writable) { + const header = outputToken.errorText(`❌ Error`) + await printLogMessage(outputContent`${header}`.value, stdout, 'dev-session') + const messages = errors.map((error) => { + const content = outputToken.errorText(`└ ${error.error}`) + return printLogMessage(outputContent`${content}`.value, stdout, error.prefix) + }) + await Promise.all(messages) +} + async function printSuccess(message: string, stdout: Writable) { await printLogMessage(outputContent`${outputToken.green(message)}`.value, stdout) }