Skip to content

Commit d0bdf20

Browse files
committed
fix(@angular/build): expose unit test and karma builder API
This commit exposes the Karma and Unit test builder API Closes: #30644
1 parent 6b4512b commit d0bdf20

File tree

6 files changed

+83
-13
lines changed

6 files changed

+83
-13
lines changed

goldens/public-api/angular/build/index.api.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import { BuilderContext } from '@angular-devkit/architect';
88
import { BuilderOutput } from '@angular-devkit/architect';
9+
import type { ConfigOptions } from 'karma';
910
import type http from 'node:http';
1011
import { OutputFile } from 'esbuild';
1112
import type { Plugin as Plugin_2 } from 'esbuild';
@@ -151,9 +152,17 @@ export function executeDevServerBuilder(options: DevServerBuilderOptions, contex
151152
// @public
152153
export function executeExtractI18nBuilder(options: ExtractI18nBuilderOptions, context: BuilderContext, extensions?: ApplicationBuilderExtensions): Promise<BuilderOutput>;
153154

155+
// @public
156+
export function executeKarmaBuilder(options: KarmaBuilderOptions, context: BuilderContext, transforms?: {
157+
karmaOptions?: (options: KarmaConfigOptions) => KarmaConfigOptions;
158+
}): AsyncIterable<BuilderOutput>;
159+
154160
// @public
155161
export function executeNgPackagrBuilder(options: NgPackagrBuilderOptions, context: BuilderContext): AsyncIterableIterator<BuilderOutput>;
156162

163+
// @public
164+
export function executeUnitTestBuilder(options: UnitTestBuilderOptions, context: BuilderContext, extensions?: ApplicationBuilderExtensions): AsyncIterable<BuilderOutput>;
165+
157166
// @public
158167
export type ExtractI18nBuilderOptions = {
159168
buildTarget?: string;
@@ -164,6 +173,40 @@ export type ExtractI18nBuilderOptions = {
164173
progress?: boolean;
165174
};
166175

176+
// @public
177+
export type KarmaBuilderOptions = {
178+
aot?: boolean;
179+
assets?: AssetPattern_2[];
180+
browsers?: Browsers;
181+
codeCoverage?: boolean;
182+
codeCoverageExclude?: string[];
183+
define?: {
184+
[key: string]: string;
185+
};
186+
exclude?: string[];
187+
externalDependencies?: string[];
188+
fileReplacements?: FileReplacement_2[];
189+
include?: string[];
190+
inlineStyleLanguage?: InlineStyleLanguage_2;
191+
karmaConfig?: string;
192+
loader?: {
193+
[key: string]: any;
194+
};
195+
main?: string;
196+
poll?: number;
197+
polyfills?: string[];
198+
preserveSymlinks?: boolean;
199+
progress?: boolean;
200+
reporters?: string[];
201+
scripts?: ScriptElement_2[];
202+
sourceMap?: SourceMapUnion_2;
203+
stylePreprocessorOptions?: StylePreprocessorOptions_2;
204+
styles?: StyleElement_2[];
205+
tsConfig: string;
206+
watch?: boolean;
207+
webWorkerTsConfig?: string;
208+
};
209+
167210
// @public
168211
export type NgPackagrBuilderOptions = {
169212
poll?: number;
@@ -172,6 +215,23 @@ export type NgPackagrBuilderOptions = {
172215
watch?: boolean;
173216
};
174217

218+
// @public
219+
export type UnitTestBuilderOptions = {
220+
browsers?: string[];
221+
buildTarget: string;
222+
codeCoverage?: boolean;
223+
codeCoverageExclude?: string[];
224+
codeCoverageReporters?: SchemaCodeCoverageReporter[];
225+
debug?: boolean;
226+
exclude?: string[];
227+
include?: string[];
228+
providersFile?: string;
229+
reporters?: string[];
230+
runner: Runner;
231+
tsConfig: string;
232+
watch?: boolean;
233+
};
234+
175235
// (No @packageDocumentation comment for this package)
176236

177237
```

packages/angular/build/src/builders/unit-test/builder.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@ import { OutputHashing } from '../application/schema';
2424
import { writeTestFiles } from '../karma/application_builder';
2525
import { findTests, getTestEntrypoints } from '../karma/find-tests';
2626
import { useKarmaBuilder } from './karma-bridge';
27-
import { NormalizedUnitTestOptions, injectTestingPolyfills, normalizeOptions } from './options';
28-
import type { Schema as UnitTestOptions } from './schema';
27+
import {
28+
NormalizedUnitTestBuilderOptions,
29+
injectTestingPolyfills,
30+
normalizeOptions,
31+
} from './options';
32+
import type { Schema as UnitTestBuilderOptions } from './schema';
2933

30-
export type { UnitTestOptions };
34+
export type { UnitTestBuilderOptions };
3135

3236
type VitestCoverageOption = Exclude<import('vitest/node').InlineConfig['coverage'], undefined>;
3337

@@ -36,7 +40,7 @@ type VitestCoverageOption = Exclude<import('vitest/node').InlineConfig['coverage
3640
*/
3741
// eslint-disable-next-line max-lines-per-function
3842
export async function* execute(
39-
options: UnitTestOptions,
43+
options: UnitTestBuilderOptions,
4044
context: BuilderContext,
4145
extensions: ApplicationBuilderExtensions = {},
4246
): AsyncIterable<BuilderOutput> {
@@ -383,7 +387,7 @@ function generateOutputPath(): string {
383387
return path.join('dist', 'test-out', `${datePrefix}-${uuidSuffix}`);
384388
}
385389
function generateCoverageOption(
386-
codeCoverage: NormalizedUnitTestOptions['codeCoverage'],
390+
codeCoverage: NormalizedUnitTestBuilderOptions['codeCoverage'],
387391
workspaceRoot: string,
388392
outputPath: string,
389393
): VitestCoverageOption {

packages/angular/build/src/builders/unit-test/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
import { type Builder, createBuilder } from '@angular-devkit/architect';
10-
import { type UnitTestOptions, execute } from './builder';
10+
import { type UnitTestBuilderOptions, execute } from './builder';
1111

12-
export { type UnitTestOptions, execute };
12+
export { type UnitTestBuilderOptions, execute };
1313

14-
const builder: Builder<UnitTestOptions> = createBuilder(execute);
14+
const builder: Builder<UnitTestBuilderOptions> = createBuilder(execute);
1515

1616
export default builder;

packages/angular/build/src/builders/unit-test/karma-bridge.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
1010
import type { ApplicationBuilderInternalOptions } from '../application/options';
1111
import type { KarmaBuilderOptions } from '../karma';
12-
import { type NormalizedUnitTestOptions, injectTestingPolyfills } from './options';
12+
import { type NormalizedUnitTestBuilderOptions, injectTestingPolyfills } from './options';
1313

1414
export async function useKarmaBuilder(
1515
context: BuilderContext,
16-
unitTestOptions: NormalizedUnitTestOptions,
16+
unitTestOptions: NormalizedUnitTestBuilderOptions,
1717
): Promise<AsyncIterable<BuilderOutput>> {
1818
if (unitTestOptions.debug) {
1919
context.logger.warn(

packages/angular/build/src/builders/unit-test/options.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import path from 'node:path';
1111
import { normalizeCacheOptions } from '../../utils/normalize-cache';
1212
import { getProjectRootPaths } from '../../utils/project-metadata';
1313
import { isTTY } from '../../utils/tty';
14-
import type { Schema as UnitTestOptions } from './schema';
14+
import type { Schema as UnitTestBuilderOptions } from './schema';
1515

16-
export type NormalizedUnitTestOptions = Awaited<ReturnType<typeof normalizeOptions>>;
16+
export type NormalizedUnitTestBuilderOptions = Awaited<ReturnType<typeof normalizeOptions>>;
1717

1818
export async function normalizeOptions(
1919
context: BuilderContext,
2020
projectName: string,
21-
options: UnitTestOptions,
21+
options: UnitTestBuilderOptions,
2222
) {
2323
// Setup base paths based on workspace root and project information
2424
const workspaceRoot = context.workspaceRoot;

packages/angular/build/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,9 @@ export {
2626
execute as executeNgPackagrBuilder,
2727
type NgPackagrBuilderOptions,
2828
} from './builders/ng-packagr';
29+
export {
30+
execute as executeUnitTestBuilder,
31+
type UnitTestBuilderOptions,
32+
} from './builders/unit-test';
33+
34+
export { execute as executeKarmaBuilder, type KarmaBuilderOptions } from './builders/karma';

0 commit comments

Comments
 (0)