Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ async function _renderUniversal(
): Promise<BrowserBuilderOutput> {
// Get browser target options.
const browserTarget = targetFromTargetString(options.browserTarget);
const rawBrowserOptions = (await context.getTargetOptions(browserTarget)) as JsonObject &
BrowserBuilderSchema;
const rawBrowserOptions = await context.getTargetOptions(browserTarget);
const browserBuilderName = await context.getBuilderNameForTarget(browserTarget);
const browserOptions = await context.validateOptions<JsonObject & BrowserBuilderSchema>(
rawBrowserOptions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ interface OutputFileRecord {
servable: boolean;
}

/**
* Build options that are also present on the dev server but are only passed
* to the build.
*/
const CONVENIENCE_BUILD_OPTIONS = ['watch', 'poll', 'verbose'] as const;

// eslint-disable-next-line max-lines-per-function
export async function* serveWithVite(
serverOptions: NormalizedDevServerOptions,
Expand All @@ -53,22 +59,23 @@ export async function* serveWithVite(
},
): AsyncIterableIterator<DevServerBuilderOutput> {
// Get the browser configuration from the target name.
const rawBrowserOptions = (await context.getTargetOptions(
serverOptions.buildTarget,
)) as json.JsonObject & BrowserBuilderOptions;
const rawBrowserOptions = await context.getTargetOptions(serverOptions.buildTarget);

// Deploy url is not used in the dev-server.
delete rawBrowserOptions.deployUrl;

const browserOptions = (await context.validateOptions(
{
...rawBrowserOptions,
watch: serverOptions.watch,
poll: serverOptions.poll,
verbose: serverOptions.verbose,
} as json.JsonObject & BrowserBuilderOptions,
// Copy convenience options to build
for (const optionName of CONVENIENCE_BUILD_OPTIONS) {
const optionValue = serverOptions[optionName];
if (optionValue !== undefined) {
rawBrowserOptions[optionName] = optionValue;
}
}

const browserOptions = await context.validateOptions<json.JsonObject & BrowserBuilderOptions>(
rawBrowserOptions,
builderName,
)) as json.JsonObject & BrowserBuilderOptions;
);

if (browserOptions.prerender || browserOptions.ssr) {
// Disable prerendering if enabled and force SSR.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,7 @@ export function serveWebpackBrowser(
}

// Get the browser configuration from the target name.
const rawBrowserOptions = (await context.getTargetOptions(
options.buildTarget,
)) as json.JsonObject & BrowserBuilderSchema;
const rawBrowserOptions = await context.getTargetOptions(options.buildTarget);

if (rawBrowserOptions.outputHashing && rawBrowserOptions.outputHashing !== OutputHashing.None) {
// Disable output hashing for dev build as this can cause memory leaks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
createBuilder,
targetFromTargetString,
} from '@angular-devkit/architect';
import { json } from '@angular-devkit/core';
import * as fs from 'fs';
import { readFile } from 'node:fs/promises';
import ora from 'ora';
Expand All @@ -30,7 +29,7 @@ import type { RenderOptions, RenderResult } from './render-worker';
import { RoutesExtractorWorkerData } from './routes-extractor-worker';
import { Schema } from './schema';

type PrerenderBuilderOptions = Schema & json.JsonObject;
type PrerenderBuilderOptions = Schema;
type PrerenderBuilderOutput = BuilderOutput;

class RoutesSet extends Set<string> {
Expand Down
19 changes: 13 additions & 6 deletions packages/angular_devkit/build_angular/src/utils/normalize-cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
* found in the LICENSE file at https://angular.io/license
*/

import { json } from '@angular-devkit/core';
import { join, resolve } from 'path';
import { VERSION } from './package-version';

Expand All @@ -25,14 +24,22 @@ interface CacheMetadata {
path?: string;
}

function hasCacheMetadata(value: unknown): value is { cli: { cache: CacheMetadata } } {
return (
!!value &&
typeof value === 'object' &&
'cli' in value &&
!!value['cli'] &&
typeof value['cli'] === 'object' &&
'cache' in value['cli']
);
}

export function normalizeCacheOptions(
metadata: json.JsonObject,
projectMetadata: unknown,
worspaceRoot: string,
): NormalizedCachedOptions {
const cacheMetadata: CacheMetadata =
json.isJsonObject(metadata.cli) && json.isJsonObject(metadata.cli.cache)
? metadata.cli.cache
: {};
const cacheMetadata = hasCacheMetadata(projectMetadata) ? projectMetadata.cli.cache : {};

const { enabled = true, environment = 'local', path = '.angular/cache' } = cacheMetadata;
const isCI = process.env['CI'] === '1' || process.env['CI']?.toLowerCase() === 'true';
Expand Down