From 968ee3428046eaad8eb56518c73195f43b6d4ead Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 9 Oct 2023 08:15:30 +0000 Subject: [PATCH] fix(@angular-devkit/build-angular): fully downlevel async/await when using vite dev-server with caching enabled Prior to this change, async/await in external packages were not being correctly downlevelled when using vite dev-server with cache enabled. Closes #25985 --- .../src/builders/dev-server/vite-server.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts index 6f8ebe68b7f7..97e413c18202 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts @@ -18,8 +18,10 @@ import path, { posix } from 'node:path'; import type { Connect, InlineConfig, ViteDevServer } from 'vite'; import { BuildOutputFile, BuildOutputFileType } from '../../tools/esbuild/bundler-context'; import { JavaScriptTransformer } from '../../tools/esbuild/javascript-transformer'; +import { getFeatureSupport, transformSupportedBrowsersToTargets } from '../../tools/esbuild/utils'; import { createAngularLocaleDataPlugin } from '../../tools/vite/i18n-locale-plugin'; import { RenderOptions, renderPage } from '../../utils/server-rendering/render-page'; +import { getSupportedBrowsers } from '../../utils/supported-browsers'; import { getIndexOutputFile } from '../../utils/webpack-browser-config'; import { buildEsbuildBrowser } from '../browser-esbuild'; import { Schema as BrowserBuilderOptions } from '../browser-esbuild/schema'; @@ -131,6 +133,16 @@ export async function* serveWithVite( if (server) { handleUpdate(generatedFiles, server, serverOptions, context.logger); } else { + const projectName = context.target?.project; + if (!projectName) { + throw new Error('The builder requires a target.'); + } + + const { root = '' } = await context.getProjectMetadata(projectName); + const projectRoot = path.join(context.workspaceRoot, root as string); + const browsers = getSupportedBrowsers(projectRoot, context.logger); + const target = transformSupportedBrowsersToTargets(browsers); + // Setup server and start listening const serverConfiguration = await setupServer( serverOptions, @@ -140,6 +152,7 @@ export async function* serveWithVite( browserOptions.externalDependencies, !!browserOptions.ssr, prebundleTransformer, + target, ); server = await createServer(serverConfiguration); @@ -295,6 +308,7 @@ export async function setupServer( prebundleExclude: string[] | undefined, ssr: boolean, prebundleTransformer: JavaScriptTransformer, + target: string[], ): Promise { const proxy = await loadProxyConfiguration( serverOptions.workspaceRoot, @@ -556,6 +570,9 @@ export async function setupServer( entries: [], // Add an esbuild plugin to run the Angular linker on dependencies esbuildOptions: { + // Set esbuild supported targets. + target, + supported: getFeatureSupport(target), plugins: [ { name: 'angular-vite-optimize-deps',