From 1cebc3a5e96366b65b8812a72716614f3ae37188 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Sun, 21 Apr 2024 11:29:35 -0400 Subject: [PATCH] refactor(@angular-devkit/build-angular): use dev-server implementation neutral builder output result interface The dev-server builder will now only provide an interface with typed fields for the combined set of common elements for the Webpack and Vite development server implementations. Any additional builder specific runtime fields will still be present and accessible. --- .../angular_devkit/build_angular/index.md | 11 +++++++---- .../angular_devkit/build_angular/BUILD.bazel | 1 + .../src/builders/dev-server/builder.ts | 2 +- .../src/builders/dev-server/index.ts | 2 +- .../src/builders/dev-server/output.ts | 18 ++++++++++++++++++ .../builders/dev-server/specs/works_spec.ts | 3 ++- .../src/builders/dev-server/vite-server.ts | 2 +- 7 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 packages/angular_devkit/build_angular/src/builders/dev-server/output.ts diff --git a/goldens/public-api/angular_devkit/build_angular/index.md b/goldens/public-api/angular_devkit/build_angular/index.md index 307e855401..ffff9981f8 100644 --- a/goldens/public-api/angular_devkit/build_angular/index.md +++ b/goldens/public-api/angular_devkit/build_angular/index.md @@ -12,7 +12,6 @@ import { BuilderContext } from '@angular-devkit/architect'; import { BuilderOutput } from '@angular-devkit/architect'; import type { ConfigOptions } from 'karma'; import { Configuration } from 'webpack'; -import { DevServerBuildOutput } from '@angular-devkit/build-webpack'; import type http from 'node:http'; import { IndexHtmlTransform } from '@angular/build/private'; import { json } from '@angular-devkit/core'; @@ -144,10 +143,14 @@ export interface DevServerBuilderOptions { } // @public -export type DevServerBuilderOutput = DevServerBuildOutput & { +export interface DevServerBuilderOutput extends BuilderOutput { + // (undocumented) + address?: string; + // (undocumented) baseUrl: string; - stats: BuildEventStats; -}; + // (undocumented) + port?: number; +} // @public export function executeBrowserBuilder(options: BrowserBuilderOptions, context: BuilderContext, transforms?: { diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 381b3d4943..a225bef62d 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -311,6 +311,7 @@ LARGE_SPECS = { "size": "large", "flaky": True, "extra_deps": [ + "//packages/angular_devkit/build_webpack", "@npm//@types/http-proxy", "@npm//http-proxy", "@npm//puppeteer", diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts index dbd153c477..17d36f6200 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts @@ -14,8 +14,8 @@ import { EMPTY, Observable, defer, switchMap } from 'rxjs'; import type { ExecutionTransformer } from '../../transforms'; import { checkPort } from '../../utils/check-port'; import { normalizeOptions } from './options'; +import type { DevServerBuilderOutput } from './output'; import type { Schema as DevServerBuilderOptions } from './schema'; -import type { DevServerBuilderOutput } from './webpack-server'; /** * A Builder that executes a development server based on the provided browser target option. diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts index d57172021e..6edd06ef29 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts @@ -8,8 +8,8 @@ import { createBuilder } from '@angular-devkit/architect'; import { execute } from './builder'; +import { DevServerBuilderOutput } from './output'; import { Schema as DevServerBuilderOptions } from './schema'; -import { DevServerBuilderOutput } from './webpack-server'; export { DevServerBuilderOptions, DevServerBuilderOutput, execute as executeDevServerBuilder }; export default createBuilder(execute); diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/output.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/output.ts new file mode 100644 index 0000000000..a937ca2dad --- /dev/null +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/output.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { BuilderOutput } from '@angular-devkit/architect'; + +/** + * @experimental Direct usage of this type is considered experimental. + */ +export interface DevServerBuilderOutput extends BuilderOutput { + baseUrl: string; + port?: number; + address?: string; +} diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts index 6239caa35d..c2537d110a 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts @@ -8,6 +8,7 @@ import { Architect, BuilderRun } from '@angular-devkit/architect'; import { DevServerBuilderOutput } from '@angular-devkit/build-angular'; +import { EmittedFiles } from '@angular-devkit/build-webpack'; import { normalize, virtualFs } from '@angular-devkit/core'; import { createArchitect, host } from '../../../testing/test-utils'; @@ -54,7 +55,7 @@ describe('Dev Server Builder', () => { const output = (await run.result) as DevServerBuilderOutput; expect(output.success).toBe(true); const hasSourceMaps = - output.emittedFiles && output.emittedFiles.some((f) => f.extension === '.map'); + output.emittedFiles && output.emittedFiles.some((f: EmittedFiles) => f.extension === '.map'); expect(hasSourceMaps).toBe(false, `Expected emitted files not to contain '.map' files.`); }); 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 556f36c14e..39f9b56428 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 @@ -33,7 +33,7 @@ import { getIndexOutputFile } from '../../utils/webpack-browser-config'; import { buildEsbuildBrowser } from '../browser-esbuild'; import { Schema as BrowserBuilderOptions } from '../browser-esbuild/schema'; import type { NormalizedDevServerOptions } from './options'; -import type { DevServerBuilderOutput } from './webpack-server'; +import type { DevServerBuilderOutput } from './output'; interface OutputFileRecord { contents: Uint8Array;