From ecc107d83bfdfd9d5dd1087e264892d60361625c Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:36:21 -0400 Subject: [PATCH 01/53] perf(@angular/cli): enable Node.js compile code cache when available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Angular CLI will now enable the Node.js compile cache when available for use. Node.js v22.8 and higher currently provide support for this feature. The compile cache stores the v8 intermediate forms of JavaScript code for the Angular CLI itself. This provides a speed up to initialization on subsequent uses the Angular CLI. The Node.js cache is stored in a temporary directory in a globally accessible location so that all Node.js instances of a compatible version can share the cache. The code cache can be disabled if preferred via `NODE_DISABLE_COMPILE_CACHE=1`. Based on initial profiling, this change provides an ~6% production build time improvement for a newly generated project once the cache is available. ``` Benchmark 1: NODE_DISABLE_COMPILE_CACHE=1 node ./node_modules/.bin/ng build Time (mean ± σ): 2.617 s ± 0.016 s [User: 3.795 s, System: 1.284 s] Range (min … max): 2.597 s … 2.640 s 10 runs Benchmark 2: node ./node_modules/.bin/ng build Time (mean ± σ): 2.475 s ± 0.017 s [User: 3.555 s, System: 1.354 s] Range (min … max): 2.454 s … 2.510 s 10 runs Summary node ./node_modules/.bin/ng build ran 1.06 ± 0.01 times faster than NODE_DISABLE_COMPILE_CACHE=1 node ./node_modules/.bin/ng build ``` --- .../tools/angular/compilation/parallel-compilation.ts | 7 ++++++- .../build/src/tools/esbuild/javascript-transformer.ts | 6 ++++++ packages/angular/build/src/tools/sass/sass-service.ts | 6 ++++++ packages/angular/build/src/typings.d.ts | 7 +++++++ packages/angular/cli/bin/bootstrap.js | 10 +++++++++- 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts index 8fa33860b5b4..84bd53891d92 100644 --- a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts @@ -8,7 +8,7 @@ import type { CompilerOptions } from '@angular/compiler-cli'; import type { PartialMessage } from 'esbuild'; -import { createRequire } from 'node:module'; +import { createRequire, getCompileCacheDir } from 'node:module'; import { MessageChannel } from 'node:worker_threads'; import Piscina from 'piscina'; import type { SourceFile } from 'typescript'; @@ -41,6 +41,11 @@ export class ParallelCompilation extends AngularCompilation { useAtomics: !process.versions.webcontainer, filename: localRequire.resolve('./parallel-worker'), recordTiming: false, + env: { + ...process.env, + // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) + 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), + }, }); } diff --git a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts index ce4b0aa91356..6dbf2a9596a9 100644 --- a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts +++ b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts @@ -8,6 +8,7 @@ import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; +import { getCompileCacheDir } from 'node:module'; import Piscina from 'piscina'; import { Cache } from './cache'; @@ -62,6 +63,11 @@ export class JavaScriptTransformer { // Shutdown idle threads after 1 second of inactivity idleTimeout: 1000, recordTiming: false, + env: { + ...process.env, + // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) + 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), + }, }); return this.#workerPool; diff --git a/packages/angular/build/src/tools/sass/sass-service.ts b/packages/angular/build/src/tools/sass/sass-service.ts index 545e777a4b70..ce6f18cadbfe 100644 --- a/packages/angular/build/src/tools/sass/sass-service.ts +++ b/packages/angular/build/src/tools/sass/sass-service.ts @@ -7,6 +7,7 @@ */ import assert from 'node:assert'; +import { getCompileCacheDir } from 'node:module'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { MessageChannel } from 'node:worker_threads'; import { Piscina } from 'piscina'; @@ -101,6 +102,11 @@ export class SassWorkerImplementation { // Shutdown idle threads after 1 second of inactivity idleTimeout: 1000, recordTiming: false, + env: { + ...process.env, + // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) + 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), + }, }); return this.#workerPool; diff --git a/packages/angular/build/src/typings.d.ts b/packages/angular/build/src/typings.d.ts index c784b3c4220a..7eaadcafc536 100644 --- a/packages/angular/build/src/typings.d.ts +++ b/packages/angular/build/src/typings.d.ts @@ -17,3 +17,10 @@ declare module 'esbuild' { export * from 'esbuild-wasm'; } + +/** + * Augment the Node.js module builtin types to support the v22.8+ compile cache functions + */ +declare module 'node:module' { + function getCompileCacheDir(): string | undefined; +} diff --git a/packages/angular/cli/bin/bootstrap.js b/packages/angular/cli/bin/bootstrap.js index 96b978296dcc..1eefb72f05c1 100644 --- a/packages/angular/cli/bin/bootstrap.js +++ b/packages/angular/cli/bin/bootstrap.js @@ -18,4 +18,12 @@ * range. */ -import('../lib/init.js'); +// Enable on-disk code caching if available (Node.js 22.8+) +try { + const { enableCompileCache } = require('node:module'); + + enableCompileCache?.(); +} catch {} + +// Initialize the Angular CLI +void import('../lib/init.js'); From 576ff604cd739a9f41d588fa093ca2568e46826c Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 3 Sep 2024 08:07:34 +0000 Subject: [PATCH 02/53] feat(@angular/ssr): introduce `AngularNodeAppEngine` API for Node.js integration Expose a variant of `AngularAppEngine` tailored for Node.js. These additions streamline the process by minimizing boilerplate code and eliminate the need for users to call `createWebRequestFromNodeRequest` before invoking the render method. --- .../public-api/angular/ssr/node/index.api.md | 12 +++ packages/angular/ssr/node/public_api.ts | 6 ++ packages/angular/ssr/node/src/app-engine.ts | 95 +++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 packages/angular/ssr/node/src/app-engine.ts diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index a695e5068131..08bb8a506ced 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -6,10 +6,16 @@ import { ApplicationRef } from '@angular/core'; import type { IncomingMessage } from 'node:http'; +import type { IncomingMessage as IncomingMessage_2 } from 'http'; import type { ServerResponse } from 'node:http'; import { StaticProvider } from '@angular/core'; import { Type } from '@angular/core'; +// @public +export interface AngularNodeServerAppManager { + render(request: Request | IncomingMessage_2, requestContext?: unknown): Promise; +} + // @public export class CommonEngine { constructor(options?: CommonEngineOptions | undefined); @@ -40,6 +46,12 @@ export interface CommonEngineRenderOptions { // @public export function createWebRequestFromNodeRequest(nodeRequest: IncomingMessage): Request; +// @public +export function destroyAngularNodeAppEngine(): void; + +// @public +export function getOrCreateAngularNodeAppEngine(): AngularNodeServerAppManager; + // @public export function writeResponseToNodeResponse(source: Response, destination: ServerResponse): Promise; diff --git a/packages/angular/ssr/node/public_api.ts b/packages/angular/ssr/node/public_api.ts index 4736a45c24f9..a83f9ddf19ae 100644 --- a/packages/angular/ssr/node/public_api.ts +++ b/packages/angular/ssr/node/public_api.ts @@ -12,5 +12,11 @@ export { type CommonEngineOptions, } from './src/common-engine/common-engine'; +export { + type AngularNodeServerAppManager, + destroyAngularNodeAppEngine, + getOrCreateAngularNodeAppEngine, +} from './src/app-engine'; + export { writeResponseToNodeResponse } from './src/response'; export { createWebRequestFromNodeRequest } from './src/request'; diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts new file mode 100644 index 000000000000..cf5203e2efe5 --- /dev/null +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -0,0 +1,95 @@ +/** + * @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.dev/license + */ + +import { ɵAngularAppEngine as AngularAppEngine } from '@angular/ssr'; +import type { IncomingMessage } from 'http'; +import { createWebRequestFromNodeRequest } from './request'; + +/** + * Angular server application engine. + * Manages Angular server applications (including localized ones) and handles rendering requests. + + * @developerPreview + */ +export interface AngularNodeServerAppManager { + /** + * Renders an HTTP response based on the incoming request using the Angular server application. + * + * The method processes the incoming request, determines the appropriate route, and prepares the + * rendering context to generate a response. If the request URL corresponds to a static file (excluding `/index.html`), + * the method returns `null`. + * + * Example: A request to `https://www.example.com/page/index.html` will render the Angular route + * associated with `https://www.example.com/page`. + * + * @param request - The incoming HTTP request object to be rendered. It can be a `Request` or `IncomingMessage` object. + * @param requestContext - Optional additional context for the request, such as metadata or custom settings. + * @returns A promise that resolves to a `Response` object, or `null` if the request URL is for a static file + * (e.g., `./logo.png`) rather than an application route. + */ + render(request: Request | IncomingMessage, requestContext?: unknown): Promise; +} + +/** + * Angular server application engine. + * Manages Angular server applications (including localized ones), handles rendering requests, + * and optionally transforms index HTML before rendering. + */ +export class AngularNodeAppEngine extends AngularAppEngine implements AngularNodeServerAppManager { + /** + * Renders an HTTP response based on the incoming request using the Angular server application. + * + * The method processes the incoming request, determines the appropriate route, and prepares the + * rendering context to generate a response. If the request URL corresponds to a static file (excluding `/index.html`), + * the method returns `null`. + * + * Example: A request to `https://www.example.com/page/index.html` will render the Angular route + * associated with `https://www.example.com/page`. + * + * @param request - The incoming HTTP request object to be rendered. It can be a `Request` or `IncomingMessage` object. + * @param requestContext - Optional additional context for the request, such as metadata or custom settings. + * @returns A promise that resolves to a `Response` object, or `null` if the request URL is for a static file + * (e.g., `./logo.png`) rather than an application route. + */ + override render( + request: Request | IncomingMessage, + requestContext?: unknown, + ): Promise { + const webReq = request instanceof Request ? request : createWebRequestFromNodeRequest(request); + + return super.render(webReq, requestContext); + } +} + +let angularNodeAppEngine: AngularNodeAppEngine | undefined; + +/** + * Retrieves the existing `AngularNodeAppEngine` instance or creates a new one if it doesn't exist. + * + * This method ensures that a single instance of `AngularNodeAppEngine` is used throughout the application's lifecycle, + * promoting efficient resource management. If an instance does not exist, it will be instantiated upon the first call. + * + * @developerPreview + * @returns The existing or newly created instance of `AngularNodeAppEngine`. + */ +export function getOrCreateAngularNodeAppEngine(): AngularNodeServerAppManager { + return (angularNodeAppEngine ??= new AngularNodeAppEngine()); +} + +/** + * Destroys the current `AngularNodeAppEngine` instance and releases any associated resources. + * + * This method resets the reference to the `AngularNodeAppEngine` instance to `undefined`, allowing for the creation + * of a new instance on subsequent calls to `getOrCreateAngularNodeAppEngine()`. This is typically used when + * reinitializing the server environment or refreshing the application state. + * + * @developerPreview + */ +export function destroyAngularNodeAppEngine(): void { + angularNodeAppEngine = undefined; +} From 41fb2ed86056306406832317178ca5d94aa110e2 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 5 Sep 2024 11:44:05 +0000 Subject: [PATCH 03/53] feat(@angular/ssr): Add `getHeaders` Method to `AngularAppEngine` and `AngularNodeAppEngine` for handling pages static headers This commit introduces a new `getHeaders` method to the `AngularAppEngine` and `AngularNodeAppEngine` classes, designed to facilitate the retrieval of HTTP headers based on URL pathnames for statically generated (SSG) pages. ```typescript const angularAppEngine = new AngularNodeAppEngine(); app.use(express.static('dist/browser', { setHeaders: (res, path) => { // Retrieve headers for the current request const headers = angularAppEngine.getHeaders(res.req); // Apply the retrieved headers to the response for (const { key, value } of headers) { res.setHeader(key, value); } } })); ``` In this example, the `getHeaders` method is used within an Express application to dynamically set HTTP headers for static files. This ensures that appropriate headers are applied based on the specific request, enhancing the handling of SSG pages. --- goldens/public-api/angular/ssr/index.api.md | 1 + .../public-api/angular/ssr/node/index.api.md | 4 +- packages/angular/ssr/node/src/app-engine.ts | 65 ++++---- packages/angular/ssr/src/app-engine.ts | 32 ++++ packages/angular/ssr/src/manifest.ts | 12 ++ .../angular/ssr/src/routes/route-config.ts | 146 ++++++++++++++++++ packages/angular/ssr/test/app-engine_spec.ts | 94 +++++++---- 7 files changed, 298 insertions(+), 56 deletions(-) create mode 100644 packages/angular/ssr/src/routes/route-config.ts diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index 6d89972bde20..e6cf06fe88e9 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -6,6 +6,7 @@ // @public export interface AngularServerAppManager { + getHeaders(request: Request): Readonly>; render(request: Request, requestContext?: unknown): Promise; } diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 08bb8a506ced..86cc9c9dda65 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -6,14 +6,14 @@ import { ApplicationRef } from '@angular/core'; import type { IncomingMessage } from 'node:http'; -import type { IncomingMessage as IncomingMessage_2 } from 'http'; import type { ServerResponse } from 'node:http'; import { StaticProvider } from '@angular/core'; import { Type } from '@angular/core'; // @public export interface AngularNodeServerAppManager { - render(request: Request | IncomingMessage_2, requestContext?: unknown): Promise; + getHeaders(request: IncomingMessage): Readonly>; + render(request: IncomingMessage, requestContext?: unknown): Promise; } // @public diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index cf5203e2efe5..d54c4e9e719e 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { ɵAngularAppEngine as AngularAppEngine } from '@angular/ssr'; -import type { IncomingMessage } from 'http'; +import { destroyAngularAppEngine, getOrCreateAngularAppEngine } from '@angular/ssr'; +import type { IncomingMessage } from 'node:http'; import { createWebRequestFromNodeRequest } from './request'; /** @@ -27,12 +27,38 @@ export interface AngularNodeServerAppManager { * Example: A request to `https://www.example.com/page/index.html` will render the Angular route * associated with `https://www.example.com/page`. * - * @param request - The incoming HTTP request object to be rendered. It can be a `Request` or `IncomingMessage` object. + * @param request - The incoming HTTP request object to be rendered. * @param requestContext - Optional additional context for the request, such as metadata or custom settings. * @returns A promise that resolves to a `Response` object, or `null` if the request URL is for a static file * (e.g., `./logo.png`) rather than an application route. */ - render(request: Request | IncomingMessage, requestContext?: unknown): Promise; + render(request: IncomingMessage, requestContext?: unknown): Promise; + + /** + * Retrieves HTTP headers for a request associated with statically generated (SSG) pages, + * based on the URL pathname. + * + * @param request - The incoming request object. + * @returns A `Map` containing the HTTP headers as key-value pairs. + * @note This function should be used exclusively for retrieving headers of SSG pages. + * @example + * ```typescript + * const angularAppEngine = getOrCreateAngularNodeAppEngine(); + * + * app.use(express.static('dist/browser', { + * setHeaders: (res, path) => { + * // Retrieve headers for the current request + * const headers = angularAppEngine.getHeaders(res.req); + * + * // Apply the retrieved headers to the response + * for (const { key, value } of headers) { + * res.setHeader(key, value); + * } + * } + })); + * ``` + */ + getHeaders(request: IncomingMessage): Readonly>; } /** @@ -40,29 +66,15 @@ export interface AngularNodeServerAppManager { * Manages Angular server applications (including localized ones), handles rendering requests, * and optionally transforms index HTML before rendering. */ -export class AngularNodeAppEngine extends AngularAppEngine implements AngularNodeServerAppManager { - /** - * Renders an HTTP response based on the incoming request using the Angular server application. - * - * The method processes the incoming request, determines the appropriate route, and prepares the - * rendering context to generate a response. If the request URL corresponds to a static file (excluding `/index.html`), - * the method returns `null`. - * - * Example: A request to `https://www.example.com/page/index.html` will render the Angular route - * associated with `https://www.example.com/page`. - * - * @param request - The incoming HTTP request object to be rendered. It can be a `Request` or `IncomingMessage` object. - * @param requestContext - Optional additional context for the request, such as metadata or custom settings. - * @returns A promise that resolves to a `Response` object, or `null` if the request URL is for a static file - * (e.g., `./logo.png`) rather than an application route. - */ - override render( - request: Request | IncomingMessage, - requestContext?: unknown, - ): Promise { - const webReq = request instanceof Request ? request : createWebRequestFromNodeRequest(request); +class AngularNodeAppEngine implements AngularNodeServerAppManager { + private readonly angularAppEngine = getOrCreateAngularAppEngine(); + + render(request: IncomingMessage, requestContext?: unknown): Promise { + return this.angularAppEngine.render(createWebRequestFromNodeRequest(request), requestContext); + } - return super.render(webReq, requestContext); + getHeaders(request: IncomingMessage): Readonly> { + return this.angularAppEngine.getHeaders(createWebRequestFromNodeRequest(request)); } } @@ -92,4 +104,5 @@ export function getOrCreateAngularNodeAppEngine(): AngularNodeServerAppManager { */ export function destroyAngularNodeAppEngine(): void { angularNodeAppEngine = undefined; + destroyAngularAppEngine(); } diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 9dfb14d75303..47e7c30624f0 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -10,6 +10,7 @@ import type { AngularServerApp } from './app'; import { Hooks } from './hooks'; import { getPotentialLocaleIdFromUrl } from './i18n'; import { EntryPointExports, getAngularAppEngineManifest } from './manifest'; +import { stripIndexHtmlFromURL } from './utils/url'; /** * Angular server application engine. @@ -34,12 +35,24 @@ export interface AngularServerAppManager { * rather than an application route. */ render(request: Request, requestContext?: unknown): Promise; + + /** + * Retrieves HTTP headers for a request associated with statically generated (SSG) pages, + * based on the URL pathname. + * + * @param request - The incoming request object. + * @returns A `Map` containing the HTTP headers as key-value pairs. + * @note This function should be used exclusively for retrieving headers of SSG pages. + */ + getHeaders(request: Request): Readonly>; } /** * Angular server application engine. * Manages Angular server applications (including localized ones), handles rendering requests, * and optionally transforms index HTML before rendering. + * + * @developerPreview */ export class AngularAppEngine implements AngularServerAppManager { /** @@ -120,6 +133,25 @@ export class AngularAppEngine implements AngularServerAppManager { return entryPoints.get(potentialLocale); } + + /** + * Retrieves HTTP headers for a request associated with statically generated (SSG) pages, + * based on the URL pathname. + * + * @param request - The incoming request object. + * @returns A `Map` containing the HTTP headers as key-value pairs. + * @note This function should be used exclusively for retrieving headers of SSG pages. + */ + getHeaders(request: Request): Readonly> { + if (this.manifest.staticPathsHeaders.size === 0) { + return new Map(); + } + + const { pathname } = stripIndexHtmlFromURL(new URL(request.url)); + const headers = this.manifest.staticPathsHeaders.get(pathname); + + return new Map(headers); + } } let angularAppEngine: AngularAppEngine | undefined; diff --git a/packages/angular/ssr/src/manifest.ts b/packages/angular/ssr/src/manifest.ts index e43631290ed6..0ab6e5f439d5 100644 --- a/packages/angular/ssr/src/manifest.ts +++ b/packages/angular/ssr/src/manifest.ts @@ -43,6 +43,18 @@ export interface AngularAppEngineManifest { * This is used to determine the root path of the application. */ readonly basePath: string; + + /** + * A map that associates static paths with their corresponding HTTP headers. + * Each entry in the map consists of: + * - `key`: The static path as a string. + * - `value`: An array of tuples, where each tuple contains: + * - `headerName`: The name of the HTTP header. + * - `headerValue`: The value of the HTTP header. + */ + readonly staticPathsHeaders: Readonly< + Map + >; } /** diff --git a/packages/angular/ssr/src/routes/route-config.ts b/packages/angular/ssr/src/routes/route-config.ts new file mode 100644 index 000000000000..cf6115aa56e5 --- /dev/null +++ b/packages/angular/ssr/src/routes/route-config.ts @@ -0,0 +1,146 @@ +/** + * @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.dev/license + */ + +import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'; + +/** + * Different rendering modes for server routes. + * @developerPreview + */ +export enum RenderMode { + /** AppShell rendering mode, typically used for pre-rendered shells of the application. */ + AppShell, + + /** Server-Side Rendering (SSR) mode, where content is rendered on the server for each request. */ + SSR, + + /** Client-Side Rendering (CSR) mode, where content is rendered on the client side in the browser. */ + CSR, + + /** Static Site Generation (SSG) mode, where content is pre-rendered at build time and served as static files. */ + SSG, +} + +/** + * Fallback strategies for Static Site Generation (SSG) routes. + * @developerPreview + */ +export enum SSGFallback { + /** Use Server-Side Rendering (SSR) as the fallback for this route. */ + SSR, + + /** Use Client-Side Rendering (CSR) as the fallback for this route. */ + CSR, + + /** No fallback; Angular will not handle the response if the path is not pre-rendered. */ + None, +} + +/** + * Common interface for server routes, providing shared properties. + */ +export interface ServerRouteCommon { + /** The path associated with this route. */ + path: string; + + /** Optional additional headers to include in the response for this route. */ + headers?: Record; + + /** Optional status code to return for this route. */ + status?: number; +} + +/** + * A server route that uses AppShell rendering mode. + */ +export interface ServerRouteAppShell extends Omit { + /** Specifies that the route uses AppShell rendering mode. */ + renderMode: RenderMode.AppShell; +} + +/** + * A server route that uses Client-Side Rendering (CSR) mode. + */ +export interface ServerRouteCSR extends ServerRouteCommon { + /** Specifies that the route uses Client-Side Rendering (CSR) mode. */ + renderMode: RenderMode.CSR; +} + +/** + * A server route that uses Static Site Generation (SSG) mode. + */ +export interface ServerRouteSSG extends Omit { + /** Specifies that the route uses Static Site Generation (SSG) mode. */ + renderMode: RenderMode.SSG; + + /** + * Optional fallback strategy to use if the SSG path is not pre-rendered. + * Defaults to `SSGFallback.SSR` if not provided. + */ + fallback?: SSGFallback; + /** + * A function that returns a Promise resolving to an array of objects, each representing a route path with URL parameters. + * This function runs in the injector context, allowing access to Angular services and dependencies. + * + * @returns A Promise resolving to an array where each element is an object with string keys (representing URL parameter names) + * and string values (representing the corresponding values for those parameters in the route path). + * + * @example + * ```typescript + * export const serverRouteConfig: ServerRoutes[] = [ + * { + * path: '/product/:id', + * remderMode: RenderMode.SSG, + * async getPrerenderPaths() { + * const productService = inject(ProductService); + * const ids = await productService.getIds(); // Assuming this returns ['1', '2', '3'] + * + * return ids.map(id => ({ id })); // Generates paths like: [{ id: '1' }, { id: '2' }, { id: '3' }] + * }, + * }, + * ]; + * ``` + */ + getPrerenderPaths?: () => Promise[]>; +} + +/** + * A server route that uses Server-Side Rendering (SSR) mode. + */ +export interface ServerRouteSSR extends ServerRouteCommon { + /** Specifies that the route uses Server-Side Rendering (SSR) mode. */ + renderMode: RenderMode.SSR; +} + +/** + * Server route configuration. + * @developerPreview + */ +export type ServerRoute = ServerRouteAppShell | ServerRouteCSR | ServerRouteSSG | ServerRouteSSR; + +/** + * Token for providing the server routes configuration. + * @internal + */ +export const SERVER_ROUTES_CONFIG = new InjectionToken('SERVER_ROUTES_CONFIG'); + +/** + * Configures the necessary providers for server routes configuration. + * + * @param routes - An array of server routes to be provided. + * @returns An `EnvironmentProviders` object that contains the server routes configuration. + * @developerPreview + */ +export function provideServerRoutesConfig(routes: ServerRoute[]): EnvironmentProviders { + return makeEnvironmentProviders([ + { + provide: SERVER_ROUTES_CONFIG, + useValue: routes, + }, + ]); +} diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 50af1398dd39..f79490101273 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -47,45 +47,82 @@ describe('AngularAppEngine', () => { ]), ), basePath: '', + staticPathsHeaders: new Map([ + [ + '/about', + [ + ['Cache-Control', 'no-cache'], + ['X-Some-Header', 'value'], + ], + ], + ]), }); appEngine = new AngularAppEngine(); }); - it('should return null for requests to unknown pages', async () => { - const request = new Request('https://example.com/unknown/page'); - const response = await appEngine.render(request); - expect(response).toBeNull(); - }); + describe('render', () => { + it('should return null for requests to unknown pages', async () => { + const request = new Request('https://example.com/unknown/page'); + const response = await appEngine.render(request); + expect(response).toBeNull(); + }); - it('should return null for requests with unknown locales', async () => { - const request = new Request('https://example.com/es/home'); - const response = await appEngine.render(request); - expect(response).toBeNull(); - }); + it('should return null for requests with unknown locales', async () => { + const request = new Request('https://example.com/es/home'); + const response = await appEngine.render(request); + expect(response).toBeNull(); + }); - it('should return a rendered page with correct locale', async () => { - const request = new Request('https://example.com/it/home'); - const response = await appEngine.render(request); - expect(await response?.text()).toContain('Home works IT'); - }); + it('should return a rendered page with correct locale', async () => { + const request = new Request('https://example.com/it/home'); + const response = await appEngine.render(request); + expect(await response?.text()).toContain('Home works IT'); + }); - it('should correctly render the content when the URL ends with "index.html" with correct locale', async () => { - const request = new Request('https://example.com/it/home/index.html'); - const response = await appEngine.render(request); - expect(await response?.text()).toContain('Home works IT'); - }); + it('should correctly render the content when the URL ends with "index.html" with correct locale', async () => { + const request = new Request('https://example.com/it/home/index.html'); + const response = await appEngine.render(request); + expect(await response?.text()).toContain('Home works IT'); + }); - it('should return null for requests to unknown pages in a locale', async () => { - const request = new Request('https://example.com/it/unknown/page'); - const response = await appEngine.render(request); - expect(response).toBeNull(); + it('should return null for requests to unknown pages in a locale', async () => { + const request = new Request('https://example.com/it/unknown/page'); + const response = await appEngine.render(request); + expect(response).toBeNull(); + }); + + it('should return null for requests to file-like resources in a locale', async () => { + const request = new Request('https://example.com/it/logo.png'); + const response = await appEngine.render(request); + expect(response).toBeNull(); + }); }); - it('should return null for requests to file-like resources in a locale', async () => { - const request = new Request('https://example.com/it/logo.png'); - const response = await appEngine.render(request); - expect(response).toBeNull(); + describe('getHeaders', () => { + it('should return headers for a known path without index.html', () => { + const request = new Request('https://example.com/about'); + const headers = appEngine.getHeaders(request); + expect(Object.fromEntries(headers.entries())).toEqual({ + 'Cache-Control': 'no-cache', + 'X-Some-Header': 'value', + }); + }); + + it('should return headers for a known path with index.html', () => { + const request = new Request('https://example.com/about/index.html'); + const headers = appEngine.getHeaders(request); + expect(Object.fromEntries(headers.entries())).toEqual({ + 'Cache-Control': 'no-cache', + 'X-Some-Header': 'value', + }); + }); + + it('should return no headers for unknown paths', () => { + const request = new Request('https://example.com/unknown/path'); + const headers = appEngine.getHeaders(request); + expect(headers).toHaveSize(0); + }); }); }); @@ -115,6 +152,7 @@ describe('AngularAppEngine', () => { ], ]), basePath: '', + staticPathsHeaders: new Map(), }); appEngine = new AngularAppEngine(); From 7d9ce246a33c60ec96eb4bf99520f5475716a910 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 5 Sep 2024 18:29:23 +0000 Subject: [PATCH 04/53] refactor(@angular/ssr): remove singleton helpers This commit removes the singleton helpers and instead exposes the classes directly. --- goldens/public-api/angular/ssr/index.api.md | 9 +-- .../public-api/angular/ssr/node/index.api.md | 8 +-- packages/angular/ssr/node/public_api.ts | 6 +- packages/angular/ssr/node/src/app-engine.ts | 64 ++++------------- packages/angular/ssr/private_export.ts | 2 - packages/angular/ssr/public_api.ts | 6 +- packages/angular/ssr/src/app-engine.ts | 69 ++----------------- 7 files changed, 23 insertions(+), 141 deletions(-) diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index e6cf06fe88e9..282aad7f3b41 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -5,17 +5,12 @@ ```ts // @public -export interface AngularServerAppManager { +export class AngularAppEngine { getHeaders(request: Request): Readonly>; render(request: Request, requestContext?: unknown): Promise; + static ɵhooks: Hooks; } -// @public -export function destroyAngularAppEngine(): void; - -// @public -export function getOrCreateAngularAppEngine(): AngularServerAppManager; - // (No @packageDocumentation comment for this package) ``` diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 86cc9c9dda65..32820b80f211 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -11,7 +11,7 @@ import { StaticProvider } from '@angular/core'; import { Type } from '@angular/core'; // @public -export interface AngularNodeServerAppManager { +export class AngularNodeAppEngine { getHeaders(request: IncomingMessage): Readonly>; render(request: IncomingMessage, requestContext?: unknown): Promise; } @@ -46,12 +46,6 @@ export interface CommonEngineRenderOptions { // @public export function createWebRequestFromNodeRequest(nodeRequest: IncomingMessage): Request; -// @public -export function destroyAngularNodeAppEngine(): void; - -// @public -export function getOrCreateAngularNodeAppEngine(): AngularNodeServerAppManager; - // @public export function writeResponseToNodeResponse(source: Response, destination: ServerResponse): Promise; diff --git a/packages/angular/ssr/node/public_api.ts b/packages/angular/ssr/node/public_api.ts index a83f9ddf19ae..d8979687def9 100644 --- a/packages/angular/ssr/node/public_api.ts +++ b/packages/angular/ssr/node/public_api.ts @@ -12,11 +12,7 @@ export { type CommonEngineOptions, } from './src/common-engine/common-engine'; -export { - type AngularNodeServerAppManager, - destroyAngularNodeAppEngine, - getOrCreateAngularNodeAppEngine, -} from './src/app-engine'; +export { AngularNodeAppEngine } from './src/app-engine'; export { writeResponseToNodeResponse } from './src/response'; export { createWebRequestFromNodeRequest } from './src/request'; diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index d54c4e9e719e..c6564e05fd1e 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -6,17 +6,23 @@ * found in the LICENSE file at https://angular.dev/license */ -import { destroyAngularAppEngine, getOrCreateAngularAppEngine } from '@angular/ssr'; +import { AngularAppEngine } from '@angular/ssr'; import type { IncomingMessage } from 'node:http'; import { createWebRequestFromNodeRequest } from './request'; /** * Angular server application engine. - * Manages Angular server applications (including localized ones) and handles rendering requests. - + * Manages Angular server applications (including localized ones), handles rendering requests, + * and optionally transforms index HTML before rendering. + * + * @note This class should be instantiated once and used as a singleton across the server-side + * application to ensure consistent handling of rendering requests and resource management. + * * @developerPreview */ -export interface AngularNodeServerAppManager { +export class AngularNodeAppEngine { + private readonly angularAppEngine = new AngularAppEngine(); + /** * Renders an HTTP response based on the incoming request using the Angular server application. * @@ -32,7 +38,9 @@ export interface AngularNodeServerAppManager { * @returns A promise that resolves to a `Response` object, or `null` if the request URL is for a static file * (e.g., `./logo.png`) rather than an application route. */ - render(request: IncomingMessage, requestContext?: unknown): Promise; + render(request: IncomingMessage, requestContext?: unknown): Promise { + return this.angularAppEngine.render(createWebRequestFromNodeRequest(request), requestContext); + } /** * Retrieves HTTP headers for a request associated with statically generated (SSG) pages, @@ -43,7 +51,7 @@ export interface AngularNodeServerAppManager { * @note This function should be used exclusively for retrieving headers of SSG pages. * @example * ```typescript - * const angularAppEngine = getOrCreateAngularNodeAppEngine(); + * const angularAppEngine = new AngularNodeAppEngine(); * * app.use(express.static('dist/browser', { * setHeaders: (res, path) => { @@ -58,51 +66,7 @@ export interface AngularNodeServerAppManager { })); * ``` */ - getHeaders(request: IncomingMessage): Readonly>; -} - -/** - * Angular server application engine. - * Manages Angular server applications (including localized ones), handles rendering requests, - * and optionally transforms index HTML before rendering. - */ -class AngularNodeAppEngine implements AngularNodeServerAppManager { - private readonly angularAppEngine = getOrCreateAngularAppEngine(); - - render(request: IncomingMessage, requestContext?: unknown): Promise { - return this.angularAppEngine.render(createWebRequestFromNodeRequest(request), requestContext); - } - getHeaders(request: IncomingMessage): Readonly> { return this.angularAppEngine.getHeaders(createWebRequestFromNodeRequest(request)); } } - -let angularNodeAppEngine: AngularNodeAppEngine | undefined; - -/** - * Retrieves the existing `AngularNodeAppEngine` instance or creates a new one if it doesn't exist. - * - * This method ensures that a single instance of `AngularNodeAppEngine` is used throughout the application's lifecycle, - * promoting efficient resource management. If an instance does not exist, it will be instantiated upon the first call. - * - * @developerPreview - * @returns The existing or newly created instance of `AngularNodeAppEngine`. - */ -export function getOrCreateAngularNodeAppEngine(): AngularNodeServerAppManager { - return (angularNodeAppEngine ??= new AngularNodeAppEngine()); -} - -/** - * Destroys the current `AngularNodeAppEngine` instance and releases any associated resources. - * - * This method resets the reference to the `AngularNodeAppEngine` instance to `undefined`, allowing for the creation - * of a new instance on subsequent calls to `getOrCreateAngularNodeAppEngine()`. This is typically used when - * reinitializing the server environment or refreshing the application state. - * - * @developerPreview - */ -export function destroyAngularNodeAppEngine(): void { - angularNodeAppEngine = undefined; - destroyAngularAppEngine(); -} diff --git a/packages/angular/ssr/private_export.ts b/packages/angular/ssr/private_export.ts index 0cb5189adb3a..cfed1c49ad14 100644 --- a/packages/angular/ssr/private_export.ts +++ b/packages/angular/ssr/private_export.ts @@ -21,6 +21,4 @@ export { setAngularAppEngineManifest as ɵsetAngularAppEngineManifest, } from './src/manifest'; -export { AngularAppEngine as ɵAngularAppEngine } from './src/app-engine'; - export { InlineCriticalCssProcessor as ɵInlineCriticalCssProcessor } from './src/utils/inline-critical-css'; diff --git a/packages/angular/ssr/public_api.ts b/packages/angular/ssr/public_api.ts index 71647188bc13..c17a02e75b6b 100644 --- a/packages/angular/ssr/public_api.ts +++ b/packages/angular/ssr/public_api.ts @@ -8,8 +8,4 @@ export * from './private_export'; -export { - type AngularServerAppManager, - getOrCreateAngularAppEngine, - destroyAngularAppEngine, -} from './src/app-engine'; +export { AngularAppEngine } from './src/app-engine'; diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 47e7c30624f0..2dba398a8fd1 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -12,49 +12,17 @@ import { getPotentialLocaleIdFromUrl } from './i18n'; import { EntryPointExports, getAngularAppEngineManifest } from './manifest'; import { stripIndexHtmlFromURL } from './utils/url'; -/** - * Angular server application engine. - * Manages Angular server applications (including localized ones) and handles rendering requests. - - * @developerPreview - */ -export interface AngularServerAppManager { - /** - * Renders a response for the given HTTP request using the server application. - * - * This method processes the request, determines the appropriate route and rendering context, - * and returns an HTTP response. - * - * If the request URL appears to be for a file (excluding `/index.html`), the method returns `null`. - * A request to `https://www.example.com/page/index.html` will render the Angular route - * corresponding to `https://www.example.com/page`. - * - * @param request - The incoming HTTP request object to be rendered. - * @param requestContext - Optional additional context for the request, such as metadata. - * @returns A promise that resolves to a Response object, or `null` if the request URL represents a file (e.g., `./logo.png`) - * rather than an application route. - */ - render(request: Request, requestContext?: unknown): Promise; - - /** - * Retrieves HTTP headers for a request associated with statically generated (SSG) pages, - * based on the URL pathname. - * - * @param request - The incoming request object. - * @returns A `Map` containing the HTTP headers as key-value pairs. - * @note This function should be used exclusively for retrieving headers of SSG pages. - */ - getHeaders(request: Request): Readonly>; -} - /** * Angular server application engine. * Manages Angular server applications (including localized ones), handles rendering requests, * and optionally transforms index HTML before rendering. * + * @note This class should be instantiated once and used as a singleton across the server-side + * application to ensure consistent handling of rendering requests and resource management. + * * @developerPreview */ -export class AngularAppEngine implements AngularServerAppManager { +export class AngularAppEngine { /** * Hooks for extending or modifying the behavior of the server application. * These hooks are used by the Angular CLI when running the development server and @@ -153,32 +121,3 @@ export class AngularAppEngine implements AngularServerAppManager { return new Map(headers); } } - -let angularAppEngine: AngularAppEngine | undefined; - -/** - * Retrieves an existing `AngularAppEngine` instance or creates a new one if none exists. - * - * This method ensures that only a single instance of `AngularAppEngine` is created and reused across - * the application lifecycle, providing efficient resource management. If the instance does not exist, - * it will be instantiated upon the first call. - * - * @developerPreview - * @returns The existing or newly created instance of `AngularAppEngine`. - */ -export function getOrCreateAngularAppEngine(): AngularServerAppManager { - return (angularAppEngine ??= new AngularAppEngine()); -} - -/** - * Destroys the current `AngularAppEngine` instance, releasing any associated resources. - * - * This method resets the reference to the `AngularAppEngine` instance to `undefined`, allowing - * a new instance to be created on the next call to `getOrCreateAngularAppEngine()`. It is typically - * used when reinitializing the server environment or refreshing the application state is necessary. - * - * @developerPreview - */ -export function destroyAngularAppEngine(): void { - angularAppEngine = undefined; -} From e9c9e4995e39d9d62d10fe0497e0b98127bc8afa Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 6 Sep 2024 07:55:32 +0000 Subject: [PATCH 05/53] fix(@angular/ssr): resolve circular dependency issue from main.server.js reference in manifest The issue was addressed by changing the top-level import to a dynamic import. Closes #28358 --- .../src/utils/server-rendering/manifest.ts | 6 ++-- packages/angular/ssr/src/app.ts | 11 +++++-- packages/angular/ssr/src/manifest.ts | 5 ++-- packages/angular/ssr/src/routes/ng-routes.ts | 2 +- packages/angular/ssr/test/testing-utils.ts | 2 +- .../build/ssr/express-engine-csp-nonce.ts | 29 ++++++++++-------- .../build/ssr/express-engine-ngmodule.ts | 30 +++++++++++-------- .../build/ssr/express-engine-standalone.ts | 26 +++++++++------- 8 files changed, 66 insertions(+), 45 deletions(-) diff --git a/packages/angular/build/src/utils/server-rendering/manifest.ts b/packages/angular/build/src/utils/server-rendering/manifest.ts index d3a5519adf77..89a6f92f3387 100644 --- a/packages/angular/build/src/utils/server-rendering/manifest.ts +++ b/packages/angular/build/src/utils/server-rendering/manifest.ts @@ -89,17 +89,15 @@ export function generateAngularServerAppManifest( if ( file.path === INDEX_HTML_SERVER || file.path === INDEX_HTML_CSR || - file.path.endsWith('.css') + (inlineCriticalCss && file.path.endsWith('.css')) ) { serverAssetsContent.push(`['${file.path}', async () => ${JSON.stringify(file.text)}]`); } } const manifestContent = ` -import bootstrap from './main.server.mjs'; - export default { - bootstrap: () => bootstrap, + bootstrap: () => import('./main.server.mjs').then(m => m.default), inlineCriticalCss: ${inlineCriticalCss}, routes: ${JSON.stringify(routes, undefined, 2)}, assets: new Map([${serverAssetsContent.join(', \n')}]), diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index ec64dcdbbf75..4fd81077ec8e 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -15,7 +15,7 @@ import { getAngularAppManifest } from './manifest'; import { ServerRouter } from './routes/router'; import { REQUEST, REQUEST_CONTEXT, RESPONSE_INIT } from './tokens'; import { InlineCriticalCssProcessor } from './utils/inline-critical-css'; -import { renderAngular } from './utils/ng'; +import { AngularBootstrap, renderAngular } from './utils/ng'; /** * Enum representing the different contexts in which server rendering can occur. @@ -58,6 +58,11 @@ export class AngularServerApp { */ private inlineCriticalCssProcessor: InlineCriticalCssProcessor | undefined; + /** + * The bootstrap mechanism for the server application. + */ + private boostrap: AngularBootstrap | undefined; + /** * Renders a response for the given HTTP request using the server application. * @@ -176,7 +181,9 @@ export class AngularServerApp { html = await hooks.run('html:transform:pre', { html }); } - html = await renderAngular(html, manifest.bootstrap(), new URL(request.url), platformProviders); + this.boostrap ??= await manifest.bootstrap(); + + html = await renderAngular(html, this.boostrap, new URL(request.url), platformProviders); if (manifest.inlineCriticalCss) { // Optionally inline critical CSS. diff --git a/packages/angular/ssr/src/manifest.ts b/packages/angular/ssr/src/manifest.ts index 0ab6e5f439d5..4e29d8f76b8d 100644 --- a/packages/angular/ssr/src/manifest.ts +++ b/packages/angular/ssr/src/manifest.ts @@ -71,9 +71,10 @@ export interface AngularAppManifest { /** * The bootstrap mechanism for the server application. - * A function that returns a reference to an NgModule or a function returning a promise that resolves to an ApplicationRef. + * A function that returns a promise that resolves to an `NgModule` or a function + * returning a promise that resolves to an `ApplicationRef`. */ - readonly bootstrap: () => AngularBootstrap; + readonly bootstrap: () => Promise; /** * Indicates whether critical CSS should be inlined into the HTML. diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index d2ef31608752..2c3484d3f404 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -274,7 +274,7 @@ export async function extractRoutesAndCreateRouteTree( const routeTree = new RouteTree(); const document = await new ServerAssets(manifest).getIndexServerHtml(); const { baseHref, routes } = await getRoutesFromAngularRouterConfig( - manifest.bootstrap(), + await manifest.bootstrap(), document, url, ); diff --git a/packages/angular/ssr/test/testing-utils.ts b/packages/angular/ssr/test/testing-utils.ts index dea7b2f9f80b..7eb0ddf7683d 100644 --- a/packages/angular/ssr/test/testing-utils.ts +++ b/packages/angular/ssr/test/testing-utils.ts @@ -38,7 +38,7 @@ export function setAngularAppTestingManifest(routes: Routes, baseHref = ''): voi `, }), ), - bootstrap: () => () => { + bootstrap: async () => () => { @Component({ standalone: true, selector: 'app-root', diff --git a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-csp-nonce.ts b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-csp-nonce.ts index fcdc210fbc25..612407cbfb11 100644 --- a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-csp-nonce.ts +++ b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-csp-nonce.ts @@ -136,25 +136,30 @@ export default async function () { `, }); - async function ngDevSsr(): Promise { + async function spawnServer(): Promise { const port = await findFreePort(); - const useWebpackBuilder = !getGlobalVariable('argv')['esbuild']; - const validBundleRegEx = useWebpackBuilder ? /Compiled successfully\./ : /complete\./; + + const runCommand = useWebpackBuilder ? 'serve:ssr' : 'serve:ssr:test-project'; await execAndWaitForOutputToMatch( - 'ng', - [ - 'run', - `test-project:${useWebpackBuilder ? 'serve-ssr' : 'serve'}:production`, - '--port', - String(port), - ], - validBundleRegEx, + 'npm', + ['run', runCommand], + /Node Express server listening on/, + { + 'PORT': String(port), + }, ); return port; } - const port = await ngDevSsr(); + await ng('build'); + + if (useWebpackBuilder) { + // Build server code + await ng('run', 'test-project:server'); + } + + const port = await spawnServer(); await ng('e2e', `--base-url=http://localhost:${port}`, '--dev-server-target='); } diff --git a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-ngmodule.ts b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-ngmodule.ts index 22cb864e1a8b..e49497f4ea69 100644 --- a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-ngmodule.ts +++ b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-ngmodule.ts @@ -141,28 +141,34 @@ export default async function () { `, }); - async function ngDevSsr(): Promise { + async function spawnServer(): Promise { const port = await findFreePort(); - const validBundleRegEx = useWebpackBuilder ? /Compiled successfully\./ : /complete\./; + + const runCommand = useWebpackBuilder ? 'serve:ssr' : `serve:ssr:test-project-two`; await execAndWaitForOutputToMatch( - 'ng', - [ - 'run', - `test-project-two:${useWebpackBuilder ? 'serve-ssr' : 'serve'}:production`, - '--port', - String(port), - ], - validBundleRegEx, + 'npm', + ['run', runCommand], + /Node Express server listening on/, + { + 'PORT': String(port), + }, ); return port; } - const port = await ngDevSsr(); + await ng('build', 'test-project-two'); + + if (useWebpackBuilder) { + // Build server code + await ng('run', `test-project-two:server`); + } + + const port = await spawnServer(); await ng( 'e2e', - 'test-project-two', + '--project=test-project-two', `--base-url=http://localhost:${port}`, '--dev-server-target=', ); diff --git a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-standalone.ts b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-standalone.ts index 23abf7dfcdb9..cb51de4e6ac8 100644 --- a/tests/legacy-cli/e2e/tests/build/ssr/express-engine-standalone.ts +++ b/tests/legacy-cli/e2e/tests/build/ssr/express-engine-standalone.ts @@ -106,24 +106,28 @@ export default async function () { `, }); - async function ngDevSsr(): Promise { + async function spawnServer(): Promise { const port = await findFreePort(); - const validBundleRegEx = useWebpackBuilder ? /Compiled successfully\./ : /complete\./; + const runCommand = useWebpackBuilder ? 'serve:ssr' : 'serve:ssr:test-project'; await execAndWaitForOutputToMatch( - 'ng', - [ - 'run', - `test-project:${useWebpackBuilder ? 'serve-ssr' : 'serve'}:production`, - '--port', - String(port), - ], - validBundleRegEx, + 'npm', + ['run', runCommand], + /Node Express server listening on/, + { + 'PORT': String(port), + }, ); return port; } - const port = await ngDevSsr(); + await ng('build'); + if (useWebpackBuilder) { + // Build server code + await ng('run', `test-project:server`); + } + + const port = await spawnServer(); await ng('e2e', `--base-url=http://localhost:${port}`, '--dev-server-target='); } From 63d4f9298ecaf826254753b74ccbc6d901b06577 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 5 Sep 2024 05:12:46 +0000 Subject: [PATCH 06/53] build: update dependency ini to v5 --- package.json | 2 +- packages/angular/cli/package.json | 2 +- yarn.lock | 19 +++++++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d3d1deb55d4d..e63edb4344d7 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "http-proxy-middleware": "3.0.2", "https-proxy-agent": "7.0.5", "husky": "9.1.5", - "ini": "4.1.3", + "ini": "5.0.0", "istanbul-lib-instrument": "6.0.3", "jasmine": "^5.0.0", "jasmine-core": "~5.2.0", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index fb36eced6e81..cca8b8e482a1 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -29,7 +29,7 @@ "@listr2/prompt-adapter-inquirer": "2.0.15", "@schematics/angular": "0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", - "ini": "4.1.3", + "ini": "5.0.0", "jsonc-parser": "3.3.1", "listr2": "8.2.4", "npm-package-arg": "11.0.3", diff --git a/yarn.lock b/yarn.lock index f2a97d766734..81ad6b90b844 100644 --- a/yarn.lock +++ b/yarn.lock @@ -525,7 +525,7 @@ __metadata: "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@schematics/angular": "npm:0.0.0-PLACEHOLDER" "@yarnpkg/lockfile": "npm:1.1.0" - ini: "npm:4.1.3" + ini: "npm:5.0.0" jsonc-parser: "npm:3.3.1" listr2: "npm:8.2.4" npm-package-arg: "npm:11.0.3" @@ -719,7 +719,7 @@ __metadata: http-proxy-middleware: "npm:3.0.2" https-proxy-agent: "npm:7.0.5" husky: "npm:9.1.5" - ini: "npm:4.1.3" + ini: "npm:5.0.0" istanbul-lib-instrument: "npm:6.0.3" jasmine: "npm:^5.0.0" jasmine-core: "npm:~5.2.0" @@ -10660,10 +10660,10 @@ __metadata: languageName: node linkType: hard -"ini@npm:4.1.3, ini@npm:^4.1.2, ini@npm:^4.1.3": - version: 4.1.3 - resolution: "ini@npm:4.1.3" - checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 +"ini@npm:5.0.0": + version: 5.0.0 + resolution: "ini@npm:5.0.0" + checksum: 10c0/657491ce766cbb4b335ab221ee8f72b9654d9f0e35c32fe5ff2eb7ab8c5ce72237ff6456555b50cde88e6507a719a70e28e327b450782b4fc20c90326ec8c1a8 languageName: node linkType: hard @@ -10674,6 +10674,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:^4.1.2, ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 + languageName: node + linkType: hard + "init-package-json@npm:^6.0.3": version: 6.0.3 resolution: "init-package-json@npm:6.0.3" From d87822c1cef972026e7ea52be7728e7076478911 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 6 Sep 2024 09:10:49 +0000 Subject: [PATCH 07/53] build: update angular --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 42 +- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/pr.yml | 34 +- package.json | 8 +- tests/legacy-cli/e2e/ng-snapshot/package.json | 32 +- yarn.lock | 426 +++--------------- 8 files changed, 117 insertions(+), 433 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 2d0cf7ebfb85..78906c257be9 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@18033eeb81c00d6867f980105fa503721ada7aa3 + - uses: angular/dev-infra/github-actions/branch-manager@f94b28a2dd29a401282aaca4ded27278a854f0d9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3bcd7e8a89d5..0ab9cce6dc28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Generate JSON schema types @@ -42,11 +42,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -56,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -90,13 +90,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} @@ -149,13 +149,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -182,11 +182,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - run: yarn admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index d6642cef1f7d..03a1c372485b 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@18033eeb81c00d6867f980105fa503721ada7aa3 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@f94b28a2dd29a401282aaca4ded27278a854f0d9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/post-approval-changes@18033eeb81c00d6867f980105fa503721ada7aa3 + - uses: angular/dev-infra/github-actions/post-approval-changes@f94b28a2dd29a401282aaca4ded27278a854f0d9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index cfa47cf97230..6827ef7b363d 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@18033eeb81c00d6867f980105fa503721ada7aa3 + - uses: angular/dev-infra/github-actions/feature-request@f94b28a2dd29a401282aaca4ded27278a854f0d9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index ec43b4a5c9da..d8af87886966 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup ESLint Caching uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: @@ -54,7 +54,7 @@ jobs: - name: Run Validation run: yarn admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/linting/licenses@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Check tooling setup run: yarn check-tooling-setup - name: Check commit message @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -90,11 +90,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -155,12 +155,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@18033eeb81c00d6867f980105fa503721ada7aa3 + uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/package.json b/package.json index e63edb4344d7..1a933c99a490 100644 --- a/package.json +++ b/package.json @@ -54,16 +54,16 @@ "@ampproject/remapping": "2.3.0", "@angular/animations": "19.0.0-next.3", "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c98d2787d4aeaaba513f68a7f8b7e486367e2367", - "@angular/cdk": "19.0.0-next.2", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c", + "@angular/cdk": "19.0.0-next.3", "@angular/common": "19.0.0-next.3", "@angular/compiler": "19.0.0-next.3", "@angular/compiler-cli": "19.0.0-next.3", "@angular/core": "19.0.0-next.3", "@angular/forms": "19.0.0-next.3", "@angular/localize": "19.0.0-next.3", - "@angular/material": "19.0.0-next.2", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#5e2f68f953b5726525cdaab7ea07a4fc36344d70", + "@angular/material": "19.0.0-next.3", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725", "@angular/platform-browser": "19.0.0-next.3", "@angular/platform-browser-dynamic": "19.0.0-next.3", "@angular/platform-server": "19.0.0-next.3", diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index d7178b1af14c..08315e7c6487 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#c1c228e49bca4728b39dcdf82b20c43c6eeb88ee", - "@angular/cdk": "github:angular/cdk-builds#83e59d316e3eaacfed8a363fc691dc99c8d847a7", - "@angular/common": "github:angular/common-builds#9fb59532ab5b339c1ef7638bf635f55fabbf7b28", - "@angular/compiler": "github:angular/compiler-builds#1dda1cb1f5830aae35b84865e99d925e33f0e51a", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#e29128be6fbe7c8da4c825ea7cba74100ff5a538", - "@angular/core": "github:angular/core-builds#ddaca4ac0cc2276414c370c1461bbb822008090d", - "@angular/forms": "github:angular/forms-builds#153ffe4f6ddfb31403242513ea0823c47867cb12", - "@angular/language-service": "github:angular/language-service-builds#a02f89f938d7da91790a1255b3cfafabdd832c7d", - "@angular/localize": "github:angular/localize-builds#eaf61b7955030cc137f4964ba95ebc7018ea76bf", - "@angular/material": "github:angular/material-builds#89f2d1da63aafbb8dbdf3d82963a111f04fbdf69", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#fa57bfbbe0b0cf84d3e52f70ad3a93c6794be937", - "@angular/platform-browser": "github:angular/platform-browser-builds#2f2404390bcda4a0801db151933adac639e365ed", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#19a7a6eaf600f600caf6f87d871d059c73681ffd", - "@angular/platform-server": "github:angular/platform-server-builds#2042a4784665f34b2d0d8310ecafe2ddea71e3ff", - "@angular/router": "github:angular/router-builds#d3f14ea0888f43aae23501ed65e8158212f4337a", - "@angular/service-worker": "github:angular/service-worker-builds#34aabe282dfad582829939a0e0c59dde73055cbb" + "@angular/animations": "github:angular/animations-builds#f7dc71269374aa3149354d0ef7a3d466ef2b7150", + "@angular/cdk": "github:angular/cdk-builds#87d90c0f035464b09d1ed577020564d4293a838a", + "@angular/common": "github:angular/common-builds#08c3745bc4625ce743042045ffb7f94dd2e7fade", + "@angular/compiler": "github:angular/compiler-builds#0d91eb89eeb09fc7567718b01bfdb5bdec6abf53", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#faa78732c3e695d46dab7791c6fe88f8573ae441", + "@angular/core": "github:angular/core-builds#96f78bc060335523887b705f6143545ca95b0733", + "@angular/forms": "github:angular/forms-builds#315801c21ae7a649fc00d316744a4592f9167e96", + "@angular/language-service": "github:angular/language-service-builds#b4cd8d02f45119a15f5685a9d8458c6f9a7a0fd0", + "@angular/localize": "github:angular/localize-builds#d0c2c0055fc442ec963520b51e499dd09841395f", + "@angular/material": "github:angular/material-builds#b13ad9cb4d042d2851742994b392220489fb3280", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#82597d093549522d3f1a212a5497622a061d6ae6", + "@angular/platform-browser": "github:angular/platform-browser-builds#8efcf18c1f8b5224b8d140c290c1f584394fb940", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#77604116a46ba4c334701742ba093d6a5cfbb493", + "@angular/platform-server": "github:angular/platform-server-builds#ca55e94047607504c5c59d2605caa7f8c86f5a98", + "@angular/router": "github:angular/router-builds#efa4bb0b74eb665472fe7638468f7271481e80ee", + "@angular/service-worker": "github:angular/service-worker-builds#4ebc7c42e00b457de75dd47851c557b58d0d6bab" } } diff --git a/yarn.lock b/yarn.lock index 81ad6b90b844..b080859787e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,18 +40,18 @@ __metadata: languageName: unknown linkType: soft -"@angular-devkit/architect@npm:0.1900.0-next.2": - version: 0.1900.0-next.2 - resolution: "@angular-devkit/architect@npm:0.1900.0-next.2" +"@angular-devkit/architect@npm:0.1900.0-next.3": + version: 0.1900.0-next.3 + resolution: "@angular-devkit/architect@npm:0.1900.0-next.3" dependencies: - "@angular-devkit/core": "npm:19.0.0-next.2" + "@angular-devkit/core": "npm:19.0.0-next.3" rxjs: "npm:7.8.1" dependenciesMeta: esbuild: built: true puppeteer: built: true - checksum: 10c0/8a624997547440c582079847cac269b145c5540c825d6debdf47f50dda326df3ac160c78b2246e13c908a6b1878bd113daf3cf61292fa1cf73c13a512873dbe0 + checksum: 10c0/b06081936582c27e9cdfa559690401e6396bdb4abb4414e2015a583633b8e6c9af69f054b623b441f97a2bf1fcff538adbc27451b5502fe06d1807cf6b697ebd languageName: node linkType: hard @@ -201,9 +201,9 @@ __metadata: languageName: unknown linkType: soft -"@angular-devkit/core@npm:19.0.0-next.2": - version: 19.0.0-next.2 - resolution: "@angular-devkit/core@npm:19.0.0-next.2" +"@angular-devkit/core@npm:19.0.0-next.3": + version: 19.0.0-next.3 + resolution: "@angular-devkit/core@npm:19.0.0-next.3" dependencies: ajv: "npm:8.17.1" ajv-formats: "npm:3.0.1" @@ -221,7 +221,7 @@ __metadata: peerDependenciesMeta: chokidar: optional: true - checksum: 10c0/e97b360427a1b4006481ef67e4ef12ad6434278188da73be2bd168b9df1e7b7eb86afd5a911290dd357569768faa82f8149fc43a4c82d05670813e14702958de + checksum: 10c0/59536de061568b94d5652cd9e297f1a8e7a95deae0a4d78822ec3cfc39149484d755e8730fd67c31eded2f6a14b146b5cec2c02a1f7c45384317f25094ec95d7 languageName: node linkType: hard @@ -331,12 +331,12 @@ __metadata: languageName: node linkType: hard -"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#c98d2787d4aeaaba513f68a7f8b7e486367e2367": - version: 0.0.0-18033eeb81c00d6867f980105fa503721ada7aa3 - resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=c98d2787d4aeaaba513f68a7f8b7e486367e2367" +"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c": + version: 0.0.0-f94b28a2dd29a401282aaca4ded27278a854f0d9 + resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c" dependencies: "@angular/benchpress": "npm:0.3.0" - "@angular/build": "npm:19.0.0-next.2" + "@angular/build": "npm:19.0.0-next.3" "@babel/core": "npm:^7.16.0" "@babel/helper-annotate-as-pure": "npm:^7.18.6" "@babel/plugin-proposal-async-generator-functions": "npm:^7.20.1" @@ -373,7 +373,7 @@ __metadata: dependenciesMeta: re2: built: false - checksum: 10c0/992931f031c7a861c1608d46a5d4fd787ffb25a9ff76fa73497fe5625329a12ab50741e07938626ebda9e94b6d94ae8afe67e64e6306933f47073fb955a8dd36 + checksum: 10c0/3e333fccf24ce9d9c1ecc56408cb966a95286586e5cfad12e7a75796d97d697335289bef4c0b9d13c6dc32cf884f1f41c7eb7aaae95c889eddb274d5887bcfb7 languageName: node linkType: hard @@ -434,17 +434,17 @@ __metadata: languageName: unknown linkType: soft -"@angular/build@npm:19.0.0-next.2": - version: 19.0.0-next.2 - resolution: "@angular/build@npm:19.0.0-next.2" +"@angular/build@npm:19.0.0-next.3": + version: 19.0.0-next.3 + resolution: "@angular/build@npm:19.0.0-next.3" dependencies: "@ampproject/remapping": "npm:2.3.0" - "@angular-devkit/architect": "npm:0.1900.0-next.2" + "@angular-devkit/architect": "npm:0.1900.0-next.3" "@babel/core": "npm:7.25.2" "@babel/helper-annotate-as-pure": "npm:7.24.7" "@babel/helper-split-export-declaration": "npm:7.24.7" - "@babel/plugin-syntax-import-attributes": "npm:7.24.7" - "@inquirer/confirm": "npm:3.1.22" + "@babel/plugin-syntax-import-attributes": "npm:7.25.6" + "@inquirer/confirm": "npm:3.2.0" "@vitejs/plugin-basic-ssl": "npm:1.1.0" browserslist: "npm:^4.23.0" critters: "npm:0.0.24" @@ -452,27 +452,27 @@ __metadata: fast-glob: "npm:3.3.2" https-proxy-agent: "npm:7.0.5" listr2: "npm:8.2.4" - lmdb: "npm:3.0.14" + lmdb: "npm:3.1.0" magic-string: "npm:0.30.11" mrmime: "npm:2.0.0" parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" piscina: "npm:4.6.1" - rollup: "npm:4.21.1" - sass: "npm:1.77.8" + rollup: "npm:4.21.2" + sass: "npm:1.78.0" semver: "npm:7.6.3" - vite: "npm:5.4.2" + vite: "npm:5.4.3" watchpack: "npm:2.4.2" peerDependencies: "@angular/compiler-cli": ^19.0.0-next.0 "@angular/localize": ^19.0.0-next.0 "@angular/platform-server": ^19.0.0-next.0 "@angular/service-worker": ^19.0.0-next.0 - "@angular/ssr": ^19.0.0-next.2 + "@angular/ssr": ^19.0.0-next.3 less: ^4.2.0 postcss: ^8.4.0 tailwindcss: ^2.0.0 || ^3.0.0 - typescript: ">=5.4 <5.6" + typescript: ">=5.5 <5.7" dependenciesMeta: esbuild: built: true @@ -493,13 +493,13 @@ __metadata: optional: true tailwindcss: optional: true - checksum: 10c0/704e0508939aae85cb87e57da6d15aa24000b19427d32ba1e0da0140b5462d30a7624d4299b63eda3b482854e3ba2b9bb68e88f00cfa983ec70a7f7fe8947bca + checksum: 10c0/98f9fba58b947a3b58c79350e5a92a86f857135e8753b687343135e03cc72282e4c21735ece03b96964d035b46e239eb94108af031777bf600b2bb86405161ee languageName: node linkType: hard -"@angular/cdk@npm:19.0.0-next.2": - version: 19.0.0-next.2 - resolution: "@angular/cdk@npm:19.0.0-next.2" +"@angular/cdk@npm:19.0.0-next.3": + version: 19.0.0-next.3 + resolution: "@angular/cdk@npm:19.0.0-next.3" dependencies: parse5: "npm:^7.1.2" tslib: "npm:^2.3.0" @@ -510,7 +510,7 @@ __metadata: dependenciesMeta: parse5: optional: true - checksum: 10c0/a1a09dcf8c96d60f3002c44b08e3f8d36f26a7b427b8a2b9bed9150fc7581592a6383a71de46bb701ffa0edab4617c6b411e3c7fb64639726ac0350c377e448b + checksum: 10c0/50313523af0d3307da21fc4e8db4e121d76dfc6f16c167182c836d42c7dc73caf7579a3e2b975e6be682c3ac9476c26a977c0aa7d8d9ea7a1df04bb78dcc30fc languageName: node linkType: hard @@ -630,16 +630,16 @@ __metadata: "@ampproject/remapping": "npm:2.3.0" "@angular/animations": "npm:19.0.0-next.3" "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch" - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c98d2787d4aeaaba513f68a7f8b7e486367e2367" - "@angular/cdk": "npm:19.0.0-next.2" + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c" + "@angular/cdk": "npm:19.0.0-next.3" "@angular/common": "npm:19.0.0-next.3" "@angular/compiler": "npm:19.0.0-next.3" "@angular/compiler-cli": "npm:19.0.0-next.3" "@angular/core": "npm:19.0.0-next.3" "@angular/forms": "npm:19.0.0-next.3" "@angular/localize": "npm:19.0.0-next.3" - "@angular/material": "npm:19.0.0-next.2" - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#5e2f68f953b5726525cdaab7ea07a4fc36344d70" + "@angular/material": "npm:19.0.0-next.3" + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725" "@angular/platform-browser": "npm:19.0.0-next.3" "@angular/platform-browser-dynamic": "npm:19.0.0-next.3" "@angular/platform-server": "npm:19.0.0-next.3" @@ -830,26 +830,26 @@ __metadata: languageName: node linkType: hard -"@angular/material@npm:19.0.0-next.2": - version: 19.0.0-next.2 - resolution: "@angular/material@npm:19.0.0-next.2" +"@angular/material@npm:19.0.0-next.3": + version: 19.0.0-next.3 + resolution: "@angular/material@npm:19.0.0-next.3" dependencies: tslib: "npm:^2.3.0" peerDependencies: "@angular/animations": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - "@angular/cdk": 19.0.0-next.2 + "@angular/cdk": 19.0.0-next.3 "@angular/common": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/core": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/forms": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/platform-browser": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/1425325e8f8eed66a3e4fd3a3da0465b59637a6ecef3e86c8424218f85591a916a436233c387154296a4e24d6318a2e5a419f2deb9c56991fbaec240f20f14ae + checksum: 10c0/ec785ddbe27ec7bfa6531142e525d71eb933db2ceab0007340fd3eac8c2fc4cdeb602851f0f0e8cf9db4fc11cd462e258b10e369e263b92d427b664a0f3e6b78 languageName: node linkType: hard -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#5e2f68f953b5726525cdaab7ea07a4fc36344d70": - version: 0.0.0-18033eeb81c00d6867f980105fa503721ada7aa3 - resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=5e2f68f953b5726525cdaab7ea07a4fc36344d70" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725": + version: 0.0.0-f94b28a2dd29a401282aaca4ded27278a854f0d9 + resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=026c48689806b9c1df3e358e93c988d3944c5725" dependencies: "@octokit/rest": "npm:21.0.2" "@types/semver": "npm:^7.3.6" @@ -863,7 +863,7 @@ __metadata: yaml: "npm:2.5.1" bin: ng-dev: ./bundles/cli.mjs - checksum: 10c0/94502ad6593ec5516ba7ce1e4670a6d8cd324eea2685349a0671d800d782ca9e091b55811d1d7de835d86612f1d51523ca062dbb1e8670fc99bf60e55c99796f + checksum: 10c0/b9b895d08259238bbe55a1fc9d785191378f86095f7a5987382aa1bf3d508a9568bf2e0bcce640f201be0fd04e1a16c4a6ed8f3ae05e898c98523e4bfea7f4e0 languageName: node linkType: hard @@ -1432,17 +1432,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/eccc54d0f03c96d0eec7a6e2fa124dadbc7298345b62ffc4238f173308c4325b5598f139695ff05a95cf78412ef6903599e4b814496612bf39aad4715a16375b - languageName: node - linkType: hard - "@babel/plugin-syntax-import-attributes@npm:7.25.6, @babel/plugin-syntax-import-attributes@npm:^7.24.7": version: 7.25.6 resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6" @@ -2978,16 +2967,6 @@ __metadata: languageName: node linkType: hard -"@inquirer/confirm@npm:3.1.22": - version: 3.1.22 - resolution: "@inquirer/confirm@npm:3.1.22" - dependencies: - "@inquirer/core": "npm:^9.0.10" - "@inquirer/type": "npm:^1.5.2" - checksum: 10c0/99e1a17e62a674d8e440a11bf4e9d5a62666247823b091314e52ee40929a6a6e8ce60086ec653bbeb59117bfc940d807c6f4b604cf5cf51f24009b9d09d5bf98 - languageName: node - linkType: hard - "@inquirer/confirm@npm:3.2.0, @inquirer/confirm@npm:^3.2.0": version: 3.2.0 resolution: "@inquirer/confirm@npm:3.2.0" @@ -2998,7 +2977,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/core@npm:^9.0.10, @inquirer/core@npm:^9.1.0": +"@inquirer/core@npm:^9.1.0": version: 9.1.0 resolution: "@inquirer/core@npm:9.1.0" dependencies: @@ -3133,7 +3112,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/type@npm:^1.5.1, @inquirer/type@npm:^1.5.2, @inquirer/type@npm:^1.5.3": +"@inquirer/type@npm:^1.5.1, @inquirer/type@npm:^1.5.3": version: 1.5.3 resolution: "@inquirer/type@npm:1.5.3" dependencies: @@ -3282,13 +3261,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-darwin-arm64@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-darwin-arm64@npm:3.0.14" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@lmdb/lmdb-darwin-arm64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-darwin-arm64@npm:3.1.0" @@ -3296,13 +3268,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-darwin-x64@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-darwin-x64@npm:3.0.14" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@lmdb/lmdb-darwin-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-darwin-x64@npm:3.1.0" @@ -3310,13 +3275,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-arm64@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-linux-arm64@npm:3.0.14" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@lmdb/lmdb-linux-arm64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-arm64@npm:3.1.0" @@ -3324,13 +3282,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-arm@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-linux-arm@npm:3.0.14" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@lmdb/lmdb-linux-arm@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-arm@npm:3.1.0" @@ -3338,13 +3289,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-x64@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-linux-x64@npm:3.0.14" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@lmdb/lmdb-linux-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-x64@npm:3.1.0" @@ -3352,13 +3296,6 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-win32-x64@npm:3.0.14": - version: 3.0.14 - resolution: "@lmdb/lmdb-win32-x64@npm:3.0.14" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@lmdb/lmdb-win32-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-win32-x64@npm:3.1.0" @@ -4027,13 +3964,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm-eabi@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" @@ -4041,13 +3971,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-android-arm64@npm:4.21.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-android-arm64@npm:4.21.2" @@ -4055,13 +3978,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" @@ -4069,13 +3985,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" @@ -4083,13 +3992,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" @@ -4097,13 +3999,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" @@ -4111,13 +4006,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" @@ -4125,13 +4013,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" @@ -4139,13 +4020,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" @@ -4153,13 +4027,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" @@ -4167,13 +4034,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-s390x-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" @@ -4181,13 +4041,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" @@ -4195,13 +4048,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" @@ -4209,13 +4055,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" @@ -4223,13 +4062,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" @@ -4237,13 +4069,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" @@ -12199,41 +12024,6 @@ __metadata: languageName: node linkType: hard -"lmdb@npm:3.0.14": - version: 3.0.14 - resolution: "lmdb@npm:3.0.14" - dependencies: - "@lmdb/lmdb-darwin-arm64": "npm:3.0.14" - "@lmdb/lmdb-darwin-x64": "npm:3.0.14" - "@lmdb/lmdb-linux-arm": "npm:3.0.14" - "@lmdb/lmdb-linux-arm64": "npm:3.0.14" - "@lmdb/lmdb-linux-x64": "npm:3.0.14" - "@lmdb/lmdb-win32-x64": "npm:3.0.14" - msgpackr: "npm:^1.10.2" - node-addon-api: "npm:^6.1.0" - node-gyp: "npm:latest" - node-gyp-build-optional-packages: "npm:5.2.2" - ordered-binary: "npm:^1.4.1" - weak-lru-cache: "npm:^1.2.2" - dependenciesMeta: - "@lmdb/lmdb-darwin-arm64": - optional: true - "@lmdb/lmdb-darwin-x64": - optional: true - "@lmdb/lmdb-linux-arm": - optional: true - "@lmdb/lmdb-linux-arm64": - optional: true - "@lmdb/lmdb-linux-x64": - optional: true - "@lmdb/lmdb-win32-x64": - optional: true - bin: - download-lmdb-prebuilds: bin/download-prebuilds.js - checksum: 10c0/7af6cbede603e483e8d2a7fdeeb1083b792eb00f702cb3c7de181f696b87bbd09b0414a59f9fe5bc7a27e440165f165c56b12c22c82ae236b85f9dce4f72c3e2 - languageName: node - linkType: hard - "lmdb@npm:3.1.0": version: 3.1.0 resolution: "lmdb@npm:3.1.0" @@ -14399,7 +14189,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.41": +"postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33": version: 8.4.44 resolution: "postcss@npm:8.4.44" dependencies: @@ -15248,69 +15038,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:4.21.1": - version: 4.21.1 - resolution: "rollup@npm:4.21.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.1" - "@rollup/rollup-android-arm64": "npm:4.21.1" - "@rollup/rollup-darwin-arm64": "npm:4.21.1" - "@rollup/rollup-darwin-x64": "npm:4.21.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-x64-musl": "npm:4.21.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.1" - "@types/estree": "npm:1.0.5" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/e64b6adabadc3e18544c68e9704744c333b38a68ba803c49b5344a015c5865bf35a72669ba121ba26869fa306f193884e07319ccfc570c08fd8f9e72c9949d4d - languageName: node - linkType: hard - "rollup@npm:4.21.2, rollup@npm:^4.18.0, rollup@npm:^4.20.0, rollup@npm:^4.4.0": version: 4.21.2 resolution: "rollup@npm:4.21.2" @@ -15483,29 +15210,29 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.77.8, sass@npm:^1.69.5": - version: 1.77.8 - resolution: "sass@npm:1.77.8" +"sass@npm:1.78.0": + version: 1.78.0 + resolution: "sass@npm:1.78.0" dependencies: chokidar: "npm:>=3.0.0 <4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/2bfd62794070352c804f949e69bd8bb5b4ec846deeb924251b2c3f7b503170fb1ae186f513f0166907749eb34e0277dee747edcb78c886fb471aac01be1e864c + checksum: 10c0/6577a87c00b03a5a50f3a11b4b6592f28abce34e61812e381535a3b712151bd94db3ca06467d20395431e0f38a23f99e616d6859d771fb6d4617c359f590c48c languageName: node linkType: hard -"sass@npm:1.78.0": - version: 1.78.0 - resolution: "sass@npm:1.78.0" +"sass@npm:^1.69.5": + version: 1.77.8 + resolution: "sass@npm:1.77.8" dependencies: chokidar: "npm:>=3.0.0 <4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/6577a87c00b03a5a50f3a11b4b6592f28abce34e61812e381535a3b712151bd94db3ca06467d20395431e0f38a23f99e616d6859d771fb6d4617c359f590c48c + checksum: 10c0/2bfd62794070352c804f949e69bd8bb5b4ec846deeb924251b2c3f7b503170fb1ae186f513f0166907749eb34e0277dee747edcb78c886fb471aac01be1e864c languageName: node linkType: hard @@ -17598,49 +17325,6 @@ __metadata: languageName: node linkType: hard -"vite@npm:5.4.2": - version: 5.4.2 - resolution: "vite@npm:5.4.2" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.41" - rollup: "npm:^4.20.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/23e347ca8aa6f0a774227e4eb7abae228f12c6806a727b046aa75e7ee37ffc2d68cff74360e12a42c347f79adc294e2363bc723b957bf4b382b5a8fb39e4df9d - languageName: node - linkType: hard - "vite@npm:5.4.3": version: 5.4.3 resolution: "vite@npm:5.4.3" From eb97c4354fbf9138730ad4ae6719a2c16c7ce051 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Sat, 7 Sep 2024 21:14:00 +0000 Subject: [PATCH 08/53] build: update schematics dependencies to ~5.3.0 --- .../angular_devkit/schematics_cli/schematic/files/package.json | 2 +- .../schematics/angular/utility/latest-versions/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/schematics_cli/schematic/files/package.json b/packages/angular_devkit/schematics_cli/schematic/files/package.json index 44c014f102d4..50fb75d44213 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/package.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/package.json @@ -20,6 +20,6 @@ "devDependencies": { "@types/node": "^18.18.0", "@types/jasmine": "~5.1.0", - "jasmine": "~5.2.0" + "jasmine": "~5.3.0" } } diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index f88b165c8757..25a0b27eedf1 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -9,7 +9,7 @@ "@types/node": "^18.18.0", "browser-sync": "^3.0.0", "express": "^4.18.2", - "jasmine-core": "~5.2.0", + "jasmine-core": "~5.3.0", "jasmine-spec-reporter": "~7.0.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", From f8b220317fcc080626f69b0e718aaae89c649af9 Mon Sep 17 00:00:00 2001 From: Jan Martin Date: Fri, 6 Sep 2024 12:06:22 -0700 Subject: [PATCH 09/53] docs: elaborate on debugging jasmine node tests The existing instructions don't quite cover a full debugging setup and miss some flags that allow debugging without modification of BUILD files. --- docs/process/bazel.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/process/bazel.md b/docs/process/bazel.md index fe136061fe25..4973278c30ba 100644 --- a/docs/process/bazel.md +++ b/docs/process/bazel.md @@ -46,6 +46,7 @@ things on Windows, at which point it breaks. On Linux, Bazel tests will run under a sandbox for isolation. You can turn off this sandbox by adding the [`local = True`](https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes-tests) attribute to the rule. +You can also force local execution by passing `--test_output=streamed`. Then you will find the intermediate test files in `bazel-out/k8-fastbuild/bin`, followed by the test target path. @@ -58,6 +59,16 @@ causes jasmine to exit with a non-zero exit code. While testing, you can remove the `shard_count` attribute to prevent sharding and the `flaky` attribute to prevent repetition. +Setting `--test_output=streamed` will disable sharding and `--flaky_test_attempts=1` will disable +the reruns of tests that have been marked as `flaky`. + +The `.bazelrc` includes a config for running tests with remote debugging enabled: + +```sh +yarn bazel test --config=debug //packages/angular/cli:angular-cli_test +# Also disable reruns of failing tests that were marked as flaky: +yarn bazel test --config=debug --config=no-sharding //packages/angular/cli:angular-cli_test +``` NB: For a few tests, sandbox is required as otherwise the rules_nodejs linker symlinks will conflict with the yarn workspace symlinks in node_modules. From 201b60e1dd25b4abb7670e21d103b67d4eda0e14 Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Thu, 5 Sep 2024 14:57:19 -0700 Subject: [PATCH 10/53] feat(@angular/cli): handle string key/value pairs, e.g. --define --- packages/angular/cli/BUILD.bazel | 1 + .../cli/src/command-builder/command-module.ts | 72 +----- .../command-builder/utilities/json-schema.ts | 155 +++++++++++- .../utilities/json-schema_spec.ts | 221 ++++++++++++++++++ 4 files changed, 382 insertions(+), 67 deletions(-) create mode 100644 packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts diff --git a/packages/angular/cli/BUILD.bazel b/packages/angular/cli/BUILD.bazel index bfdcaca10e98..3eafc989623f 100644 --- a/packages/angular/cli/BUILD.bazel +++ b/packages/angular/cli/BUILD.bazel @@ -147,6 +147,7 @@ ts_library( "//packages/angular_devkit/schematics", "//packages/angular_devkit/schematics/testing", "@npm//@types/semver", + "@npm//@types/yargs", ], ) diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index e608c4b1d089..d80da2948ca4 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -26,7 +26,7 @@ import { considerSettingUpAutocompletion } from '../utilities/completion'; import { AngularWorkspace } from '../utilities/config'; import { memoize } from '../utilities/memoize'; import { PackageManagerUtils } from '../utilities/package-manager'; -import { Option } from './utilities/json-schema'; +import { Option, addSchemaOptionsToCommand } from './utilities/json-schema'; export type Options = { [key in keyof T as CamelCaseKey]: T[key] }; @@ -188,68 +188,16 @@ export abstract class CommandModule implements CommandModuleI * **Note:** This method should be called from the command bundler method. */ protected addSchemaOptionsToCommand(localYargs: Argv, options: Option[]): Argv { - const booleanOptionsWithNoPrefix = new Set(); - - for (const option of options) { - const { - default: defaultVal, - positional, - deprecated, - description, - alias, - userAnalytics, - type, - hidden, - name, - choices, - } = option; - - const sharedOptions: YargsOptions & PositionalOptions = { - alias, - hidden, - description, - deprecated, - choices, - // This should only be done when `--help` is used otherwise default will override options set in angular.json. - ...(this.context.args.options.help ? { default: defaultVal } : {}), - }; - - let dashedName = strings.dasherize(name); - - // Handle options which have been defined in the schema with `no` prefix. - if (type === 'boolean' && dashedName.startsWith('no-')) { - dashedName = dashedName.slice(3); - booleanOptionsWithNoPrefix.add(dashedName); - } - - if (positional === undefined) { - localYargs = localYargs.option(dashedName, { - type, - ...sharedOptions, - }); - } else { - localYargs = localYargs.positional(dashedName, { - type: type === 'array' || type === 'count' ? 'string' : type, - ...sharedOptions, - }); - } - - // Record option of analytics. - if (userAnalytics !== undefined) { - this.optionsWithAnalytics.set(name, userAnalytics); - } - } + const optionsWithAnalytics = addSchemaOptionsToCommand( + localYargs, + options, + // This should only be done when `--help` is used otherwise default will override options set in angular.json. + /* includeDefaultValues= */ this.context.args.options.help, + ); - // Handle options which have been defined in the schema with `no` prefix. - if (booleanOptionsWithNoPrefix.size) { - localYargs.middleware((options: Arguments) => { - for (const key of booleanOptionsWithNoPrefix) { - if (key in options) { - options[`no-${key}`] = !options[key]; - delete options[key]; - } - } - }, false); + // Record option of analytics. + for (const [name, userAnalytics] of optionsWithAnalytics) { + this.optionsWithAnalytics.set(name, userAnalytics); } return localYargs; diff --git a/packages/angular/cli/src/command-builder/utilities/json-schema.ts b/packages/angular/cli/src/command-builder/utilities/json-schema.ts index 2b17c1eb0226..a46b06646197 100644 --- a/packages/angular/cli/src/command-builder/utilities/json-schema.ts +++ b/packages/angular/cli/src/command-builder/utilities/json-schema.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { json } from '@angular-devkit/core'; -import yargs from 'yargs'; +import { json, strings } from '@angular-devkit/core'; +import yargs, { Arguments, Argv, PositionalOptions, Options as YargsOptions } from 'yargs'; /** * An option description. @@ -43,6 +43,55 @@ export interface Option extends yargs.Options { * If this is falsey, do not report this option. */ userAnalytics?: string; + + /** + * Type of the values in a key/value pair field. + */ + itemValueType?: 'string'; +} + +function coerceToStringMap( + dashedName: string, + value: (string | undefined)[], +): Record | Promise { + const stringMap: Record = {}; + for (const pair of value) { + // This happens when the flag isn't passed at all. + if (pair === undefined) { + continue; + } + + const eqIdx = pair.indexOf('='); + if (eqIdx === -1) { + // TODO: Remove workaround once yargs properly handles thrown errors from coerce. + // Right now these sometimes end up as uncaught exceptions instead of proper validation + // errors with usage output. + return Promise.reject( + new Error( + `Invalid value for argument: ${dashedName}, Given: '${pair}', Expected key=value pair`, + ), + ); + } + const key = pair.slice(0, eqIdx); + const value = pair.slice(eqIdx + 1); + stringMap[key] = value; + } + + return stringMap; +} + +function isStringMap(node: json.JsonObject): boolean { + // Exclude fields with more specific kinds of properties. + if (node.properties || node.patternProperties) { + return false; + } + + // Restrict to additionalProperties with string values. + return ( + json.isJsonObject(node.additionalProperties) && + !node.additionalProperties.enum && + node.additionalProperties.type === 'string' + ); } export async function parseJsonSchemaToOptions( @@ -106,10 +155,13 @@ export async function parseJsonSchemaToOptions( return false; + case 'object': + return isStringMap(current); + default: return false; } - }) as ('string' | 'number' | 'boolean' | 'array')[]; + }) as ('string' | 'number' | 'boolean' | 'array' | 'object')[]; if (types.length == 0) { // This means it's not usable on the command line. e.g. an Object. @@ -150,7 +202,6 @@ export async function parseJsonSchemaToOptions( } } - const type = types[0]; const $default = current.$default; const $defaultIndex = json.isJsonObject($default) && $default['$source'] == 'argv' ? $default['index'] : undefined; @@ -182,7 +233,6 @@ export async function parseJsonSchemaToOptions( const option: Option = { name, description: '' + (current.description === undefined ? '' : current.description), - type, default: defaultValue, choices: enumValues.length ? enumValues : undefined, required, @@ -192,6 +242,14 @@ export async function parseJsonSchemaToOptions( userAnalytics, deprecated, positional, + ...(types[0] === 'object' + ? { + type: 'array', + itemValueType: 'string', + } + : { + type: types[0], + }), }; options.push(option); @@ -211,3 +269,90 @@ export async function parseJsonSchemaToOptions( return a.name.localeCompare(b.name); }); } + +/** + * Adds schema options to a command also this keeps track of options that are required for analytics. + * **Note:** This method should be called from the command bundler method. + * + * @returns A map from option name to analytics configuration. + */ +export function addSchemaOptionsToCommand( + localYargs: Argv, + options: Option[], + includeDefaultValues: boolean, +): Map { + const booleanOptionsWithNoPrefix = new Set(); + const keyValuePairOptions = new Set(); + const optionsWithAnalytics = new Map(); + + for (const option of options) { + const { + default: defaultVal, + positional, + deprecated, + description, + alias, + userAnalytics, + type, + itemValueType, + hidden, + name, + choices, + } = option; + + let dashedName = strings.dasherize(name); + + // Handle options which have been defined in the schema with `no` prefix. + if (type === 'boolean' && dashedName.startsWith('no-')) { + dashedName = dashedName.slice(3); + booleanOptionsWithNoPrefix.add(dashedName); + } + + if (itemValueType) { + keyValuePairOptions.add(name); + } + + const sharedOptions: YargsOptions & PositionalOptions = { + alias, + hidden, + description, + deprecated, + choices, + coerce: itemValueType ? coerceToStringMap.bind(null, dashedName) : undefined, + // This should only be done when `--help` is used otherwise default will override options set in angular.json. + ...(includeDefaultValues ? { default: defaultVal } : {}), + }; + + if (positional === undefined) { + localYargs = localYargs.option(dashedName, { + array: itemValueType ? true : undefined, + type: itemValueType ?? type, + ...sharedOptions, + }); + } else { + localYargs = localYargs.positional(dashedName, { + type: type === 'array' || type === 'count' ? 'string' : type, + ...sharedOptions, + }); + } + + // Record option of analytics. + if (userAnalytics !== undefined) { + optionsWithAnalytics.set(name, userAnalytics); + } + } + + // Handle options which have been defined in the schema with `no` prefix. + if (booleanOptionsWithNoPrefix.size) { + localYargs.middleware((options: Arguments) => { + for (const key of booleanOptionsWithNoPrefix) { + if (key in options) { + options[`no-${key}`] = !options[key]; + delete options[key]; + } + } + }, false); + } + + return optionsWithAnalytics; +} diff --git a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts new file mode 100644 index 000000000000..5ec5db644bef --- /dev/null +++ b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts @@ -0,0 +1,221 @@ +/** + * @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.dev/license + */ + +import { json, schema } from '@angular-devkit/core'; +import yargs, { positional } from 'yargs'; + +import { addSchemaOptionsToCommand, parseJsonSchemaToOptions } from './json-schema'; + +const YError = (() => { + try { + const y = yargs().strict().fail(false).exitProcess(false).parse(['--forced-failure']); + } catch (e) { + if (!(e instanceof Error)) { + throw new Error('Unexpected non-Error thrown'); + } + + return e.constructor as typeof Error; + } + throw new Error('Expected parse to fail'); +})(); + +interface ParseFunction { + (argv: string[]): unknown; +} + +function withParseForSchema( + jsonSchema: json.JsonObject, + { + interactive = true, + includeDefaultValues = true, + }: { interactive?: boolean; includeDefaultValues?: boolean } = {}, +): ParseFunction { + let actualParse: ParseFunction = () => { + throw new Error('Called before init'); + }; + const parse: ParseFunction = (args) => { + return actualParse(args); + }; + + beforeEach(async () => { + const registry = new schema.CoreSchemaRegistry(); + const options = await parseJsonSchemaToOptions(registry, jsonSchema, interactive); + + actualParse = async (args: string[]) => { + // Create a fresh yargs for each call. The yargs object is stateful and + // calling .parse multiple times on the same instance isn't safe. + const localYargs = yargs().exitProcess(false).strict().fail(false); + addSchemaOptionsToCommand(localYargs, options, includeDefaultValues); + + // Yargs only exposes the parse errors as proper errors when using the + // callback syntax. This unwraps that ugly workaround so tests can just + // use simple .toThrow/.toEqual assertions. + return localYargs.parseAsync(args); + }; + }); + + return parse; +} + +describe('parseJsonSchemaToOptions', () => { + describe('without required fields in schema', () => { + const parse = withParseForSchema({ + 'type': 'object', + 'properties': { + 'maxSize': { + 'type': 'number', + }, + 'ssr': { + 'type': 'string', + 'enum': ['always', 'surprise-me', 'never'], + }, + 'extendable': { + 'type': 'object', + 'properties': {}, + 'additionalProperties': { + 'type': 'string', + }, + }, + 'someDefine': { + 'type': 'object', + 'additionalProperties': { + 'type': 'string', + }, + }, + }, + }); + + describe('type=number', () => { + it('parses valid option value', async () => { + expect(await parse(['--max-size', '42'])).toEqual( + jasmine.objectContaining({ + 'maxSize': 42, + }), + ); + }); + }); + + describe('type=string, enum', () => { + it('parses valid option value', async () => { + expect(await parse(['--ssr', 'never'])).toEqual( + jasmine.objectContaining({ + 'ssr': 'never', + }), + ); + }); + + it('rejects non-enum values', async () => { + await expectAsync(parse(['--ssr', 'yes'])).toBeRejectedWithError( + /Argument: ssr, Given: "yes", Choices:/, + ); + }); + }); + + describe('type=object', () => { + it('ignores fields that define specific properties', async () => { + await expectAsync(parse(['--extendable', 'a=b'])).toBeRejectedWithError( + /Unknown argument: extendable/, + ); + }); + + it('rejects invalid values for string maps', async () => { + await expectAsync(parse(['--some-define', 'foo'])).toBeRejectedWithError( + YError, + /Invalid value for argument: some-define, Given: 'foo', Expected key=value pair/, + ); + await expectAsync(parse(['--some-define', '42'])).toBeRejectedWithError( + YError, + /Invalid value for argument: some-define, Given: '42', Expected key=value pair/, + ); + }); + + it('aggregates an object value', async () => { + expect( + await parse([ + '--some-define', + 'A_BOOLEAN=true', + '--some-define', + 'AN_INTEGER=42', + // Ensure we can handle '=' inside of string values. + '--some-define=A_STRING="❤️=❤️"', + '--some-define', + 'AN_UNQUOTED_STRING=❤️=❤️', + ]), + ).toEqual( + jasmine.objectContaining({ + 'someDefine': { + 'A_BOOLEAN': 'true', + 'AN_INTEGER': '42', + 'A_STRING': '"❤️=❤️"', + 'AN_UNQUOTED_STRING': '❤️=❤️', + }, + }), + ); + }); + }); + }); + + describe('with required positional argument', () => { + it('marks the required argument as required', async () => { + const jsonSchema = JSON.parse(` + { + "$id": "FakeSchema", + "title": "Fake Schema", + "type": "object", + "required": ["a"], + "properties": { + "b": { + "type": "string", + "description": "b.", + "$default": { + "$source": "argv", + "index": 1 + } + }, + "a": { + "type": "string", + "description": "a.", + "$default": { + "$source": "argv", + "index": 0 + } + }, + "optC": { + "type": "string", + "description": "optC" + }, + "optA": { + "type": "string", + "description": "optA" + }, + "optB": { + "type": "string", + "description": "optB" + } + } + }`) as json.JsonObject; + const registry = new schema.CoreSchemaRegistry(); + const options = await parseJsonSchemaToOptions(registry, jsonSchema, /* interactive= */ true); + + expect(options.find((opt) => opt.name === 'a')).toEqual( + jasmine.objectContaining({ + name: 'a', + positional: 0, + required: true, + }), + ); + expect(options.find((opt) => opt.name === 'b')).toEqual( + jasmine.objectContaining({ + name: 'b', + positional: 1, + required: false, + }), + ); + }); + }); +}); From e4d598f5d13f8e55c9b3b30c7b8d65406e9ac0eb Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 9 Sep 2024 13:57:00 +0200 Subject: [PATCH 11/53] docs(@angular/cli): add playwright to e2e targets --- packages/angular/cli/src/commands/e2e/cli.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/angular/cli/src/commands/e2e/cli.ts b/packages/angular/cli/src/commands/e2e/cli.ts index 7054d358d7fb..85d9aab173a0 100644 --- a/packages/angular/cli/src/commands/e2e/cli.ts +++ b/packages/angular/cli/src/commands/e2e/cli.ts @@ -16,6 +16,10 @@ export default class E2eCommandModule implements CommandModuleImplementation { override missingTargetChoices: MissingTargetChoice[] = [ + { + name: 'Playwright', + value: 'playwright-ng-schematics', + }, { name: 'Cypress', value: '@cypress/schematic', From 27c1c778963f127276ef197833be629a412d40a3 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 9 Sep 2024 14:16:07 +0000 Subject: [PATCH 12/53] build: update all non-major dependencies --- package.json | 10 +- packages/angular/cli/package.json | 2 +- .../angular_devkit/build_angular/package.json | 4 +- .../schematics_cli/package.json | 2 +- yarn.lock | 135 +++++++++++------- 5 files changed, 91 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 1a933c99a490..8b2429bc0a5e 100644 --- a/package.json +++ b/package.json @@ -79,14 +79,14 @@ "@babel/plugin-transform-runtime": "7.25.4", "@babel/preset-env": "7.25.4", "@babel/runtime": "7.25.6", - "@bazel/bazelisk": "1.19.0", + "@bazel/bazelisk": "1.21.0", "@bazel/buildifier": "7.3.1", "@bazel/concatjs": "patch:@bazel/concatjs@npm%3A5.8.1#~/.yarn/patches/@bazel-concatjs-npm-5.8.1-1bf81df846.patch", "@bazel/jasmine": "patch:@bazel/jasmine@npm%3A5.8.1#~/.yarn/patches/@bazel-jasmine-npm-5.8.1-3370fee155.patch", "@bazel/runfiles": "^5.8.1", "@discoveryjs/json-ext": "0.6.1", "@inquirer/confirm": "3.2.0", - "@inquirer/prompts": "5.4.0", + "@inquirer/prompts": "5.5.0", "@listr2/prompt-adapter-inquirer": "2.0.15", "@rollup/plugin-commonjs": "^26.0.0", "@rollup/plugin-node-resolve": "^13.0.5", @@ -116,7 +116,7 @@ "@typescript-eslint/eslint-plugin": "8.4.0", "@typescript-eslint/parser": "8.4.0", "@vitejs/plugin-basic-ssl": "1.1.0", - "@web/test-runner": "^0.18.0", + "@web/test-runner": "^0.19.0", "@yarnpkg/lockfile": "1.1.0", "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -146,7 +146,7 @@ "ini": "5.0.0", "istanbul-lib-instrument": "6.0.3", "jasmine": "^5.0.0", - "jasmine-core": "~5.2.0", + "jasmine-core": "~5.3.0", "jasmine-spec-reporter": "~7.0.0", "jsonc-parser": "3.3.1", "karma": "~6.4.0", @@ -194,7 +194,7 @@ "source-map-support": "0.5.21", "symbol-observable": "4.0.0", "tar": "^6.1.6", - "terser": "5.31.6", + "terser": "5.32.0", "tree-kill": "1.2.2", "ts-node": "^10.9.1", "tslib": "2.7.0", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index cca8b8e482a1..1d4c89a54ff1 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -25,7 +25,7 @@ "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", "@angular-devkit/core": "0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "5.4.0", + "@inquirer/prompts": "5.5.0", "@listr2/prompt-adapter-inquirer": "2.0.15", "@schematics/angular": "0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index a587c248a182..d3cd2ddb9032 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -58,7 +58,7 @@ "semver": "7.6.3", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.31.6", + "terser": "5.32.0", "tree-kill": "1.2.2", "tslib": "2.7.0", "vite": "5.4.3", @@ -81,7 +81,7 @@ "@angular/platform-server": "^19.0.0-next.0", "@angular/service-worker": "^19.0.0-next.0", "@angular/ssr": "^0.0.0-PLACEHOLDER", - "@web/test-runner": "^0.18.0", + "@web/test-runner": "^0.19.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index a193baf1fa40..3be97f135fa8 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -18,7 +18,7 @@ "dependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "5.4.0", + "@inquirer/prompts": "5.5.0", "ansi-colors": "4.1.3", "symbol-observable": "4.0.0", "yargs-parser": "21.1.1" diff --git a/yarn.lock b/yarn.lock index b080859787e1..4ce5db00da8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -112,7 +112,7 @@ __metadata: semver: "npm:7.6.3" source-map-loader: "npm:5.0.0" source-map-support: "npm:0.5.21" - terser: "npm:5.31.6" + terser: "npm:5.32.0" tree-kill: "npm:1.2.2" tslib: "npm:2.7.0" undici: "npm:6.19.8" @@ -129,7 +129,7 @@ __metadata: "@angular/platform-server": ^19.0.0-next.0 "@angular/service-worker": ^19.0.0-next.0 "@angular/ssr": ^0.0.0-PLACEHOLDER - "@web/test-runner": ^0.18.0 + "@web/test-runner": ^0.19.0 browser-sync: ^3.0.2 jest: ^29.5.0 jest-environment-jsdom: ^29.5.0 @@ -231,7 +231,7 @@ __metadata: dependencies: "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" "@angular-devkit/schematics": "npm:0.0.0-PLACEHOLDER" - "@inquirer/prompts": "npm:5.4.0" + "@inquirer/prompts": "npm:5.5.0" ansi-colors: "npm:4.1.3" symbol-observable: "npm:4.0.0" yargs-parser: "npm:21.1.1" @@ -521,7 +521,7 @@ __metadata: "@angular-devkit/architect": "npm:0.0.0-EXPERIMENTAL-PLACEHOLDER" "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" "@angular-devkit/schematics": "npm:0.0.0-PLACEHOLDER" - "@inquirer/prompts": "npm:5.4.0" + "@inquirer/prompts": "npm:5.5.0" "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@schematics/angular": "npm:0.0.0-PLACEHOLDER" "@yarnpkg/lockfile": "npm:1.1.0" @@ -655,14 +655,14 @@ __metadata: "@babel/plugin-transform-runtime": "npm:7.25.4" "@babel/preset-env": "npm:7.25.4" "@babel/runtime": "npm:7.25.6" - "@bazel/bazelisk": "npm:1.19.0" + "@bazel/bazelisk": "npm:1.21.0" "@bazel/buildifier": "npm:7.3.1" "@bazel/concatjs": "patch:@bazel/concatjs@npm%3A5.8.1#~/.yarn/patches/@bazel-concatjs-npm-5.8.1-1bf81df846.patch" "@bazel/jasmine": "patch:@bazel/jasmine@npm%3A5.8.1#~/.yarn/patches/@bazel-jasmine-npm-5.8.1-3370fee155.patch" "@bazel/runfiles": "npm:^5.8.1" "@discoveryjs/json-ext": "npm:0.6.1" "@inquirer/confirm": "npm:3.2.0" - "@inquirer/prompts": "npm:5.4.0" + "@inquirer/prompts": "npm:5.5.0" "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@rollup/plugin-commonjs": "npm:^26.0.0" "@rollup/plugin-node-resolve": "npm:^13.0.5" @@ -692,7 +692,7 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:8.4.0" "@typescript-eslint/parser": "npm:8.4.0" "@vitejs/plugin-basic-ssl": "npm:1.1.0" - "@web/test-runner": "npm:^0.18.0" + "@web/test-runner": "npm:^0.19.0" "@yarnpkg/lockfile": "npm:1.1.0" ajv: "npm:8.17.1" ajv-formats: "npm:3.0.1" @@ -722,7 +722,7 @@ __metadata: ini: "npm:5.0.0" istanbul-lib-instrument: "npm:6.0.3" jasmine: "npm:^5.0.0" - jasmine-core: "npm:~5.2.0" + jasmine-core: "npm:~5.3.0" jasmine-spec-reporter: "npm:~7.0.0" jsonc-parser: "npm:3.3.1" karma: "npm:~6.4.0" @@ -770,7 +770,7 @@ __metadata: source-map-support: "npm:0.5.21" symbol-observable: "npm:4.0.0" tar: "npm:^6.1.6" - terser: "npm:5.31.6" + terser: "npm:5.32.0" tree-kill: "npm:1.2.2" ts-node: "npm:^10.9.1" tslib: "npm:2.7.0" @@ -2329,13 +2329,13 @@ __metadata: languageName: node linkType: hard -"@bazel/bazelisk@npm:1.19.0": - version: 1.19.0 - resolution: "@bazel/bazelisk@npm:1.19.0" +"@bazel/bazelisk@npm:1.21.0": + version: 1.21.0 + resolution: "@bazel/bazelisk@npm:1.21.0" bin: bazel: bazelisk.js bazelisk: bazelisk.js - checksum: 10c0/7c82fcdb20689ff34e646dd338679df19c6f45bedbe85a0dc8fc26c5d4ca0efed2827875e11bd57ed503e3ccde0aae1914c6b30f375c9420da2f92c2904409b9 + checksum: 10c0/e65099388bd2b15dd6ee60823d51fe6b838bc7382921c2e61a354a85402903a48c06dad17861472d49e16f867ffeb7ea9610e93e4408de18c10d4fabf7d68367 languageName: node linkType: hard @@ -3009,14 +3009,14 @@ __metadata: languageName: node linkType: hard -"@inquirer/expand@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/expand@npm:2.2.0" +"@inquirer/expand@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/expand@npm:2.3.0" dependencies: "@inquirer/core": "npm:^9.1.0" "@inquirer/type": "npm:^1.5.3" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/34076a3d633bef14e0f1c7963410e454ad7811afe4011ac0cf9b6270357aba1793c4dea27d45a44d37657dfa1f986c7c0fdb24a5b5c7e7c0475c91975f8833bd + checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 languageName: node linkType: hard @@ -3058,21 +3058,21 @@ __metadata: languageName: node linkType: hard -"@inquirer/prompts@npm:5.4.0": - version: 5.4.0 - resolution: "@inquirer/prompts@npm:5.4.0" +"@inquirer/prompts@npm:5.5.0": + version: 5.5.0 + resolution: "@inquirer/prompts@npm:5.5.0" dependencies: "@inquirer/checkbox": "npm:^2.5.0" "@inquirer/confirm": "npm:^3.2.0" "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.2.0" + "@inquirer/expand": "npm:^2.3.0" "@inquirer/input": "npm:^2.3.0" "@inquirer/number": "npm:^1.1.0" "@inquirer/password": "npm:^2.2.0" "@inquirer/rawlist": "npm:^2.3.0" "@inquirer/search": "npm:^1.1.0" "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2a1f4a7db99f0f65cba04cbac082f3ae6e0da66febbc0afb31040e626841a1321e0e17d404be89b2ea5a3d2e8f9b5cd30d68911d363f9c66c8a8b904402a63cd + checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 languageName: node linkType: hard @@ -3849,11 +3849,11 @@ __metadata: languageName: node linkType: hard -"@puppeteer/browsers@npm:2.3.0": - version: 2.3.0 - resolution: "@puppeteer/browsers@npm:2.3.0" +"@puppeteer/browsers@npm:2.4.0": + version: 2.4.0 + resolution: "@puppeteer/browsers@npm:2.4.0" dependencies: - debug: "npm:^4.3.5" + debug: "npm:^4.3.6" extract-zip: "npm:^2.0.1" progress: "npm:^2.0.3" proxy-agent: "npm:^6.4.0" @@ -3863,7 +3863,7 @@ __metadata: yargs: "npm:^17.7.2" bin: browsers: lib/cjs/main-cli.js - checksum: 10c0/8665a7d5be5e1489855780b7684bf94a55647b54a8391474cbdc1defdb2e4e6642722ef1d20bfabe49d3aed3eec2c8db41d6eabc24440f4a16d071effc5a1049 + checksum: 10c0/62227a4e3104d8bc8fbd6cd008ff82d63d8b8747ee6bba544d905c86d86b0ff005a1dfb6abbe1db80723733f338a55dd5719b12333f4332c0c7a1f6b007ed660 languageName: node linkType: hard @@ -5564,16 +5564,16 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-chrome@npm:^0.16.0": - version: 0.16.0 - resolution: "@web/test-runner-chrome@npm:0.16.0" +"@web/test-runner-chrome@npm:^0.17.0": + version: 0.17.0 + resolution: "@web/test-runner-chrome@npm:0.17.0" dependencies: "@web/test-runner-core": "npm:^0.13.0" "@web/test-runner-coverage-v8": "npm:^0.8.0" async-mutex: "npm:0.4.0" chrome-launcher: "npm:^0.15.0" - puppeteer-core: "npm:^22.0.0" - checksum: 10c0/3f3fd75ef28fb021c0392c5ce4b2d8815c0e6ebb6fb0d02db00f237224c1a0f16d8a91c0b9d4c5066ffa75447a8068e412c48c428482256bb28e45a4b815cf16 + puppeteer-core: "npm:^23.2.0" + checksum: 10c0/b035961226cf135a6977ebaec09dbd4298425d434dcb47491bbf024b06ebb91c73eb993f68566b6fc1505647605449ac6782531f2ec988424037053fa0bc62eb languageName: node linkType: hard @@ -5643,14 +5643,14 @@ __metadata: languageName: node linkType: hard -"@web/test-runner@npm:^0.18.0": - version: 0.18.3 - resolution: "@web/test-runner@npm:0.18.3" +"@web/test-runner@npm:^0.19.0": + version: 0.19.0 + resolution: "@web/test-runner@npm:0.19.0" dependencies: "@web/browser-logs": "npm:^0.4.0" "@web/config-loader": "npm:^0.3.0" "@web/dev-server": "npm:^0.4.0" - "@web/test-runner-chrome": "npm:^0.16.0" + "@web/test-runner-chrome": "npm:^0.17.0" "@web/test-runner-commands": "npm:^0.9.0" "@web/test-runner-core": "npm:^0.13.0" "@web/test-runner-mocha": "npm:^0.9.0" @@ -5666,7 +5666,7 @@ __metadata: bin: web-test-runner: dist/bin.js wtr: dist/bin.js - checksum: 10c0/0b0cdd73d46b4fbcc4d08081bb3c84dfd29b487c206e06c98fea0dcf276cd397941117a851276c0259a5841bd577540ccf2bb9f1c3c612c52d3e145b647644af + checksum: 10c0/580991533aa1df07725f24ff82b96c6e386dc0589f29d9221cde58ca52f70e45a889c1f707246b87b037a053a80564d39cb18c3366b3d4a4ce363da092411fb6 languageName: node linkType: hard @@ -7153,16 +7153,16 @@ __metadata: languageName: node linkType: hard -"chromium-bidi@npm:0.6.3": - version: 0.6.3 - resolution: "chromium-bidi@npm:0.6.3" +"chromium-bidi@npm:0.6.5": + version: 0.6.5 + resolution: "chromium-bidi@npm:0.6.5" dependencies: mitt: "npm:3.0.1" urlpattern-polyfill: "npm:10.0.0" zod: "npm:3.23.8" peerDependencies: devtools-protocol: "*" - checksum: 10c0/226829bfc3c9de54803cfbce5cb3075f729aa2f862b22e2e91c75d35425b537f85c49d36793d69bf4778115c4bd31ab3e9eaee1cbc28a1506a6d4b1752e34b9a + checksum: 10c0/3486b60b786b59dd9807f88c7430a8e9e8fd09dc13a6144a061659aabf5237a88074795f40b54fb8c00f3824f9a64463c5f253a995eeaa1e1473681a21e746e0 languageName: node linkType: hard @@ -8132,10 +8132,10 @@ __metadata: languageName: node linkType: hard -"devtools-protocol@npm:0.0.1312386": - version: 0.0.1312386 - resolution: "devtools-protocol@npm:0.0.1312386" - checksum: 10c0/1073b2edcee76db094fdce97fe8869f3469866513e864379e04311a429b439ba51e54809fdffb09b67bf0c37b5ac5bfd2b0536ae217b7ea2cbe2e571fbed7e8e +"devtools-protocol@npm:0.0.1330662": + version: 0.0.1330662 + resolution: "devtools-protocol@npm:0.0.1330662" + checksum: 10c0/358b088b570aa7ad92a8d93c58075c759ff38ecc15adbb55a501d73b9119bafaa256cdd6c1a87bdd48ceaf1cd9678807222776a2870476fd53429d7e36b5206a languageName: node linkType: hard @@ -11203,6 +11203,13 @@ __metadata: languageName: node linkType: hard +"jasmine-core@npm:~5.3.0": + version: 5.3.0 + resolution: "jasmine-core@npm:5.3.0" + checksum: 10c0/231c8a43bcf8d4bd5cd9bab9ed5b7a895c7febc3ccc8b7e0629e6f78535826d01434b94c6edda312287752b164108bbafb0e69edba40f6905da9e37907eb6cbd + languageName: node + linkType: hard + "jasmine-reporters@npm:~2.5.0": version: 2.5.2 resolution: "jasmine-reporters@npm:2.5.2" @@ -14465,16 +14472,17 @@ __metadata: languageName: node linkType: hard -"puppeteer-core@npm:^22.0.0": - version: 22.15.0 - resolution: "puppeteer-core@npm:22.15.0" +"puppeteer-core@npm:^23.2.0": + version: 23.3.0 + resolution: "puppeteer-core@npm:23.3.0" dependencies: - "@puppeteer/browsers": "npm:2.3.0" - chromium-bidi: "npm:0.6.3" + "@puppeteer/browsers": "npm:2.4.0" + chromium-bidi: "npm:0.6.5" debug: "npm:^4.3.6" - devtools-protocol: "npm:0.0.1312386" + devtools-protocol: "npm:0.0.1330662" + typed-query-selector: "npm:^2.12.0" ws: "npm:^8.18.0" - checksum: 10c0/6d041db5f654088857a39e592672fe8cce1e974a1547020d404d3bd5f0e1568eecb2de9b4626b6a48cbe15da1c6ee9d33962cb473dcb67ff08927f4d4ec1e461 + checksum: 10c0/80d303de857f9d48e577bdc8289aa51767e190a3f45e8a81d2ea5e71d74b19aa2febc4580a8cd1ca472bf74ea207951a11d02e112187321c9624a30a3e4a3316 languageName: node linkType: hard @@ -16341,7 +16349,21 @@ __metadata: languageName: node linkType: hard -"terser@npm:5.31.6, terser@npm:^5.26.0": +"terser@npm:5.32.0": + version: 5.32.0 + resolution: "terser@npm:5.32.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/94daae4881258eb7d09abd46378e23d11ee46caa507b2fb26c5595c7e490914be734e0de38c50041dc38fae5fca24de11badf042dfbbfc1d336ed117335c420a + languageName: node + linkType: hard + +"terser@npm:^5.26.0": version: 5.31.6 resolution: "terser@npm:5.31.6" dependencies: @@ -16789,6 +16811,13 @@ __metadata: languageName: node linkType: hard +"typed-query-selector@npm:^2.12.0": + version: 2.12.0 + resolution: "typed-query-selector@npm:2.12.0" + checksum: 10c0/069509887ecfff824a470f5f93d300cc9223cb059a36c47ac685f2812c4c9470340e07615893765e4264cef1678507532fa78f642fd52f276b589f7f5d791f79 + languageName: node + linkType: hard + "typescript@npm:5.4.2": version: 5.4.2 resolution: "typescript@npm:5.4.2" From 724cd41cf3d48826a815e3bc8eed75150c7f257e Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 9 Sep 2024 18:12:25 +0000 Subject: [PATCH 13/53] build: lock file maintenance --- yarn.lock | 155 ++++++++++++++++++------------------------------------ 1 file changed, 51 insertions(+), 104 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4ce5db00da8b..055f2b228709 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4734,11 +4734,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:^22.5.2": - version: 22.5.2 - resolution: "@types/node@npm:22.5.2" + version: 22.5.4 + resolution: "@types/node@npm:22.5.4" dependencies: undici-types: "npm:~6.19.2" - checksum: 10c0/624a7fd76229eacc6c158eb3b9afd55b811d7f01976c5f92c630d5b9d47047cc218928c343988484a165ac400e5eb6fe70ea300fc7242deeb0e920c7724290f6 + checksum: 10c0/b445daa7eecd761ad4d778b882d6ff7bcc3b4baad2086ea9804db7c5d4a4ab0298b00d7f5315fc640a73b5a1d52bbf9628e09c9fec0cf44dbf9b4df674a8717d languageName: node linkType: hard @@ -4750,11 +4750,11 @@ __metadata: linkType: hard "@types/node@npm:^18.13.0, @types/node@npm:^18.19.21": - version: 18.19.48 - resolution: "@types/node@npm:18.19.48" + version: 18.19.50 + resolution: "@types/node@npm:18.19.50" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/f07fc6636629bf5121d33e532f824470ecd44b14831c486fe11b95aac6c8bf7c838651a4cae82031fbc99888192b84f77e939a2cf27edb20935ed4a6d01d0b5d + checksum: 10c0/36e6bc9eb47213ce94a868dad9504465ad89fba6af9f7954e22bb27fb17a32ac495f263d0cf4fdaee74becd7b2629609a446ec8c2b59b7a07bd587567c8a4782 languageName: node linkType: hard @@ -5906,11 +5906,11 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1": - version: 8.3.3 - resolution: "acorn-walk@npm:8.3.3" + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" dependencies: acorn: "npm:^8.11.0" - checksum: 10c0/4a9e24313e6a0a7b389e712ba69b66b455b4cb25988903506a8d247e7b126f02060b05a8a5b738a9284214e4ca95f383dd93443a4ba84f1af9b528305c7f243b + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 languageName: node linkType: hard @@ -6134,9 +6134,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc languageName: node linkType: hard @@ -6490,7 +6490,7 @@ __metadata: languageName: node linkType: hard -"b4a@npm:^1.6.4": +"b4a@npm:^1.6.4, b4a@npm:^1.6.6": version: 1.6.6 resolution: "b4a@npm:1.6.6" checksum: 10c0/56f30277666cb511a15829e38d369b114df7dc8cec4cedc09cc5d685bc0f27cb63c7bcfb58e09a19a1b3c4f2541069ab078b5328542e85d74a39620327709a38 @@ -6588,11 +6588,12 @@ __metadata: linkType: hard "bare-stream@npm:^2.0.0": - version: 2.2.0 - resolution: "bare-stream@npm:2.2.0" + version: 2.2.1 + resolution: "bare-stream@npm:2.2.1" dependencies: + b4a: "npm:^1.6.6" streamx: "npm:^2.18.0" - checksum: 10c0/2c59d5abd5d5c8337f6b090bb5ed6870a96040814a4e36165deccfd0a116094ad526888af676073b0748fb7831fd3d6798da9e687aa699143c453b2b52c9ae0a + checksum: 10c0/fd1e33b147ba288d524f75ee2dec38c0ae34e38250c40d5261784fe02a059c819593f1fed701219690ca445ac35d6e924b154f882065995b76b4a801e3047b18 languageName: node linkType: hard @@ -7029,9 +7030,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001655 - resolution: "caniuse-lite@npm:1.0.30001655" - checksum: 10c0/fff0c0c3ffcba89828bfa6b99f118e82c064f46f15bb8655b9f2a352a3f552ccac0b87a9fe9532f8c5a29e284aae5579791e196480ec717d11ef1d1a1c2e3ff9 + version: 1.0.30001659 + resolution: "caniuse-lite@npm:1.0.30001659" + checksum: 10c0/11dc1c0795505d5c629cdf02361d7d60249646a49ed2868997144c3d9c6b0c3e18d87f6ea2b48b6deed593c483271003cebca7dd805fbda96607a9b83899eeaa languageName: node linkType: hard @@ -7875,14 +7876,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": - version: 4.3.6 - resolution: "debug@npm:4.3.6" + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -8322,9 +8323,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.4": - version: 1.5.13 - resolution: "electron-to-chromium@npm:1.5.13" - checksum: 10c0/1d88ac39447e1d718c4296f92fe89836df4688daf2d362d6c49108136795f05a56dd9c950f1c6715e0395fa037c3b5f5ea686c543fdc90e6d74a005877c45022 + version: 1.5.18 + resolution: "electron-to-chromium@npm:1.5.18" + checksum: 10c0/2c553c4e7618e887398af0fb7ddd8055beb69d37a810ad73fcea0f3e9027f1fc879ef280151fb6bae8e5b961f5597452eafc1ae5a0adca5bd49211545a34afe7 languageName: node linkType: hard @@ -8876,14 +8877,14 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.9.0": - version: 2.9.0 - resolution: "eslint-module-utils@npm:2.9.0" + version: 2.11.0 + resolution: "eslint-module-utils@npm:2.11.0" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10c0/7c45c5b54402a969e99315890c10e9bf8c8bee16c7890573343af05dfa04566d61546585678c413e5228af0550e39461be47e35a8ff0d1863e113bdbb28d1d29 + checksum: 10c0/c1b02e83429878ab22596f17a5ac138e51a520e96a5ef89a5a6698769a2d174ab28302d45eb563c0fc418d21a5842e328c37a6e8f294bf2e64e675ba55203dd7 languageName: node linkType: hard @@ -9491,12 +9492,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f languageName: node linkType: hard @@ -11196,13 +11197,6 @@ __metadata: languageName: node linkType: hard -"jasmine-core@npm:~5.2.0": - version: 5.2.0 - resolution: "jasmine-core@npm:5.2.0" - checksum: 10c0/eac5298932fef389071529d55b8b4554646cb0094c765dac48d041e7e0c70822b0a3d831acaeec5b47ce0f0c90cad8e6926202ec67804638b4e5bf89a43def3e - languageName: node - linkType: hard - "jasmine-core@npm:~5.3.0": version: 5.3.0 resolution: "jasmine-core@npm:5.3.0" @@ -11243,14 +11237,14 @@ __metadata: linkType: hard "jasmine@npm:^5.0.0": - version: 5.2.0 - resolution: "jasmine@npm:5.2.0" + version: 5.3.0 + resolution: "jasmine@npm:5.3.0" dependencies: glob: "npm:^10.2.2" - jasmine-core: "npm:~5.2.0" + jasmine-core: "npm:~5.3.0" bin: jasmine: bin/jasmine.js - checksum: 10c0/b29bf5d4c9f34267714edefcc2c2beff7f69e0220604fa988deac62308e2130e348b2c2f4d98275b4bee73c88887e8c200c791a7ed8cc6640883a35f0bee7947 + checksum: 10c0/ba9281992a5bd2ee2de001664777a3563ea43609b8c50bfd0f67aab6c0c4abbfd94726f7a2857bc2802a5c6057c5ea94b9528bb2d7dd582551105443d3da46ba languageName: node linkType: hard @@ -11767,12 +11761,12 @@ __metadata: linkType: hard "launch-editor@npm:^2.6.1": - version: 2.8.2 - resolution: "launch-editor@npm:2.8.2" + version: 2.9.1 + resolution: "launch-editor@npm:2.9.1" dependencies: picocolors: "npm:^1.0.0" shell-quote: "npm:^1.8.1" - checksum: 10c0/61f5465b2f4bc9fe88f29248a38e5e1c1e17eb7c85a8a2fa12f661fed5aabb9dfab2c55e4203a94c7768c2c67b5061e116cdadf54f56a9f2a3ae5beca42ea997 + checksum: 10c0/891f1d136ed8e4ea12e16c196a0d2e07f23c7b983e3ab532b2be1775fb244909581507cce97c50f9d5ca92680b53e4a75c72ddcf20184aa6c4da6ebbe87703f5 languageName: node linkType: hard @@ -12734,7 +12728,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.2": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.2, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -14185,7 +14179,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.45, postcss@npm:^8.4.43": +"postcss@npm:8.4.45, postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.43": version: 8.4.45 resolution: "postcss@npm:8.4.45" dependencies: @@ -14196,17 +14190,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33": - version: 8.4.44 - resolution: "postcss@npm:8.4.44" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/53c33338261a3d4f4198f8893e9dfe8b828d8d9186142ee85f02d228f04245c5bbe31239411a357a556ad20ed96f28db24d0921d63edc428fdc9133289371a1d - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -14280,9 +14263,9 @@ __metadata: linkType: hard "promise-call-limit@npm:^3.0.1": - version: 3.0.1 - resolution: "promise-call-limit@npm:3.0.1" - checksum: 10c0/2bf66a7238b9986c9b1ae0b3575c1446485b85b4befd9ee359d8386d26050d053cb2aaa57e0fc5d91e230a77e29ad546640b3afe3eb86bcfc204aa0d330f49b4 + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 languageName: node linkType: hard @@ -15218,7 +15201,7 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.78.0": +"sass@npm:1.78.0, sass@npm:^1.69.5": version: 1.78.0 resolution: "sass@npm:1.78.0" dependencies: @@ -15231,19 +15214,6 @@ __metadata: languageName: node linkType: hard -"sass@npm:^1.69.5": - version: 1.77.8 - resolution: "sass@npm:1.77.8" - dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" - immutable: "npm:^4.0.0" - source-map-js: "npm:>=0.6.2 <2.0.0" - bin: - sass: sass.js - checksum: 10c0/2bfd62794070352c804f949e69bd8bb5b4ec846deeb924251b2c3f7b503170fb1ae186f513f0166907749eb34e0277dee747edcb78c886fb471aac01be1e864c - languageName: node - linkType: hard - "saucelabs@npm:^1.5.0": version: 1.5.0 resolution: "saucelabs@npm:1.5.0" @@ -15766,9 +15736,9 @@ __metadata: linkType: hard "source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard @@ -16349,7 +16319,7 @@ __metadata: languageName: node linkType: hard -"terser@npm:5.32.0": +"terser@npm:5.32.0, terser@npm:^5.26.0": version: 5.32.0 resolution: "terser@npm:5.32.0" dependencies: @@ -16363,20 +16333,6 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.26.0": - version: 5.31.6 - resolution: "terser@npm:5.31.6" - dependencies: - "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" - commander: "npm:^2.20.0" - source-map-support: "npm:~0.5.20" - bin: - terser: bin/terser - checksum: 10c0/b17d02b65a52a5041430572b3c514475820f5e7590fa93773c0f5b4be601ccf3f6d745bf5a79f3ee58187cf85edf61c24ddf4345783839fccb44c9c8fa9b427e - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -17950,7 +17906,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.5.1": +"yaml@npm:2.5.1, yaml@npm:^2.4.1": version: 2.5.1 resolution: "yaml@npm:2.5.1" bin: @@ -17959,15 +17915,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.4.1": - version: 2.5.0 - resolution: "yaml@npm:2.5.0" - bin: - yaml: bin.mjs - checksum: 10c0/771a1df083c8217cf04ef49f87244ae2dd7d7457094425e793b8f056159f167602ce172aa32d6bca21f787d24ec724aee3cecde938f6643564117bd151452631 - languageName: node - linkType: hard - "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" From 7981dd275b3a13000368ebb9d643d9e37369810e Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 10 Sep 2024 05:11:57 +0000 Subject: [PATCH 14/53] build: update dependency typescript to v5.6.2 --- package.json | 2 +- packages/ngtools/webpack/package.json | 2 +- yarn.lock | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 8b2429bc0a5e..c4aa175be1fb 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "tree-kill": "1.2.2", "ts-node": "^10.9.1", "tslib": "2.7.0", - "typescript": "5.6.1-rc", + "typescript": "5.6.2", "undici": "6.19.8", "unenv": "^1.10.0", "verdaccio": "5.32.1", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 5c89ee856de5..b5d7d974a419 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -29,7 +29,7 @@ "@angular-devkit/core": "0.0.0-PLACEHOLDER", "@angular/compiler": "19.0.0-next.3", "@angular/compiler-cli": "19.0.0-next.3", - "typescript": "5.6.1-rc", + "typescript": "5.6.2", "webpack": "5.94.0" } } diff --git a/yarn.lock b/yarn.lock index 055f2b228709..400f04c65f2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -774,7 +774,7 @@ __metadata: tree-kill: "npm:1.2.2" ts-node: "npm:^10.9.1" tslib: "npm:2.7.0" - typescript: "npm:5.6.1-rc" + typescript: "npm:5.6.2" undici: "npm:6.19.8" unenv: "npm:^1.10.0" verdaccio: "npm:5.32.1" @@ -3405,7 +3405,7 @@ __metadata: "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" "@angular/compiler": "npm:19.0.0-next.3" "@angular/compiler-cli": "npm:19.0.0-next.3" - typescript: "npm:5.6.1-rc" + typescript: "npm:5.6.2" webpack: "npm:5.94.0" peerDependencies: "@angular/compiler-cli": ^19.0.0-next.0 @@ -16794,13 +16794,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.6.1-rc": - version: 5.6.1-rc - resolution: "typescript@npm:5.6.1-rc" +"typescript@npm:5.6.2": + version: 5.6.2 + resolution: "typescript@npm:5.6.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/9d6e99b7ddbc797ebc8d09e5d7f2f81ce5f288a4e607bcded3c545ced8582796c937fba31bede5660a56f978b2f68e7c4ee85614b307425a2b4617535721509f + checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 languageName: node linkType: hard @@ -16834,13 +16834,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.6.1-rc#optional!builtin": - version: 5.6.1-rc - resolution: "typescript@patch:typescript@npm%3A5.6.1-rc#optional!builtin::version=5.6.1-rc&hash=74658d" +"typescript@patch:typescript@npm%3A5.6.2#optional!builtin": + version: 5.6.2 + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=74658d" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/7849a6f82731f33d05dc9401252eeed78cec227aa9b23c316638c12c15ff7ec0903d62aa8718ea0ab5aad2e155a74edcd0c8053b8fdf8020bd1652720d89db7c + checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd languageName: node linkType: hard From 8f051a49e6e0d95c970d342de0409897e1ac08bd Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 10 Sep 2024 08:56:44 +0200 Subject: [PATCH 15/53] build: update all remaining places to TypeScript 5.6 Updates a few leftover places to the TypeScript 5.6 final version. --- .../schematics_cli/blank/project-files/package.json | 2 +- .../schematics_cli/schematic/files/package.json | 2 +- .../github.com/Microsoft/TypeScript/BUILD.bazel | 8 ++++---- .../github.com/Microsoft/TypeScript/lib/typescript.js | 10 ++++++---- .../angular/utility/latest-versions/package.json | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/angular_devkit/schematics_cli/blank/project-files/package.json b/packages/angular_devkit/schematics_cli/blank/project-files/package.json index caa0e4b8fbdd..a023c62734bd 100644 --- a/packages/angular_devkit/schematics_cli/blank/project-files/package.json +++ b/packages/angular_devkit/schematics_cli/blank/project-files/package.json @@ -15,7 +15,7 @@ "dependencies": { "@angular-devkit/core": "^<%= coreVersion %>", "@angular-devkit/schematics": "^<%= schematicsVersion %>", - "typescript": "~5.5.2" + "typescript": "~5.6.2" }, "devDependencies": { "@types/node": "^18.18.0", diff --git a/packages/angular_devkit/schematics_cli/schematic/files/package.json b/packages/angular_devkit/schematics_cli/schematic/files/package.json index 50fb75d44213..3ce7f6383384 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/package.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/package.json @@ -15,7 +15,7 @@ "dependencies": { "@angular-devkit/core": "^<%= coreVersion %>", "@angular-devkit/schematics": "^<%= schematicsVersion %>", - "typescript": "~5.5.2" + "typescript": "~5.6.2" }, "devDependencies": { "@types/node": "^18.18.0", diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel index 937f5de2332b..42927c5a88db 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel @@ -1,11 +1,11 @@ load("//tools:defaults.bzl", "ts_library") -# files fetched on 2024-09-29 from -# https://github.com/microsoft/TypeScript/releases/tag/v5.6-rc +# files fetched on 2024-09-10 from +# https://github.com/microsoft/TypeScript/releases/tag/v5.6.2 # Commands to download: -# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.6-rc/lib/typescript.d.ts -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts -# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.6-rc/lib/typescript.js -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js +# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.6.2/lib/typescript.d.ts -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts +# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.6.2/lib/typescript.js -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js licenses(["notice"]) # Apache 2.0 diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js index 4dae4289c3c6..90f3266ee69f 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js @@ -2263,7 +2263,7 @@ module.exports = __toCommonJS(typescript_exports); // src/compiler/corePublic.ts var versionMajorMinor = "5.6"; -var version = "5.6.1-rc"; +var version = "5.6.2"; var Comparison = /* @__PURE__ */ ((Comparison3) => { Comparison3[Comparison3["LessThan"] = -1] = "LessThan"; Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo"; @@ -49088,7 +49088,7 @@ function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions cache == null ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, options, result.kind, modulePaths, result.moduleSpecifiers); return result; } -function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, options = {}) { +function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, preferences, options = {}) { const info = getInfo(importingFile.fileName, host); const importMode = options.overrideImportMode ?? importingFile.impliedNodeFormat; return getLocalModuleSpecifier( @@ -49097,7 +49097,7 @@ function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, importMode, - getModuleSpecifierPreferences({}, host, compilerOptions, importingFile) + getModuleSpecifierPreferences(preferences, host, compilerOptions, importingFile) ); } function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { @@ -82667,6 +82667,7 @@ function createTypeChecker(host) { case 214 /* NewExpression */: case 211 /* PropertyAccessExpression */: case 229 /* YieldExpression */: + case 110 /* ThisKeyword */: return 3 /* Sometimes */; case 226 /* BinaryExpression */: switch (node.operatorToken.kind) { @@ -155274,7 +155275,8 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre sourceFile, exportingFileName, compilerOptions, - createModuleSpecifierResolutionHost(program, host) + createModuleSpecifierResolutionHost(program, host), + preferences ); const importKind = getImportKind(futureExportingSourceFile, exportKind, program); const addAsTypeOnly = getAddAsTypeOnly( diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index 25a0b27eedf1..f6e6f4ea5393 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -23,7 +23,7 @@ "rxjs": "~7.8.0", "tslib": "^2.3.0", "ts-node": "~10.9.0", - "typescript": "~5.5.2", + "typescript": "~5.6.2", "zone.js": "~0.15.0" } } From 26c6d2d84492fd1964037292c0e41c42024bddb1 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 10 Sep 2024 09:00:25 +0000 Subject: [PATCH 16/53] build: update all non-major dependencies --- package.json | 6 +- .../compilation/parallel-compilation.ts | 4 +- yarn.lock | 221 +++++++++++++----- 3 files changed, 171 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index c4aa175be1fb..9aa93b5a4f4e 100644 --- a/package.json +++ b/package.json @@ -113,8 +113,8 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.4.0", - "@typescript-eslint/parser": "8.4.0", + "@typescript-eslint/eslint-plugin": "8.5.0", + "@typescript-eslint/parser": "8.5.0", "@vitejs/plugin-basic-ssl": "1.1.0", "@web/test-runner": "^0.19.0", "@yarnpkg/lockfile": "1.1.0", @@ -137,7 +137,7 @@ "eslint-config-prettier": "9.1.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.30.0", - "express": "4.19.2", + "express": "4.20.0", "fast-glob": "3.3.2", "http-proxy": "^1.18.1", "http-proxy-middleware": "3.0.2", diff --git a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts index 84bd53891d92..3a79ef73a061 100644 --- a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts @@ -52,9 +52,7 @@ export class ParallelCompilation extends AngularCompilation { override initialize( tsconfig: string, hostOptions: AngularHostOptions, - compilerOptionsTransformer?: - | ((compilerOptions: CompilerOptions) => CompilerOptions) - | undefined, + compilerOptionsTransformer?: (compilerOptions: CompilerOptions) => CompilerOptions, ): Promise<{ affectedFiles: ReadonlySet; compilerOptions: CompilerOptions; diff --git a/yarn.lock b/yarn.lock index 400f04c65f2f..03d317185ba0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -689,8 +689,8 @@ __metadata: "@types/yargs": "npm:^17.0.20" "@types/yargs-parser": "npm:^21.0.0" "@types/yarnpkg__lockfile": "npm:^1.1.5" - "@typescript-eslint/eslint-plugin": "npm:8.4.0" - "@typescript-eslint/parser": "npm:8.4.0" + "@typescript-eslint/eslint-plugin": "npm:8.5.0" + "@typescript-eslint/parser": "npm:8.5.0" "@vitejs/plugin-basic-ssl": "npm:1.1.0" "@web/test-runner": "npm:^0.19.0" "@yarnpkg/lockfile": "npm:1.1.0" @@ -713,7 +713,7 @@ __metadata: eslint-config-prettier: "npm:9.1.0" eslint-plugin-header: "npm:3.1.1" eslint-plugin-import: "npm:2.30.0" - express: "npm:4.19.2" + express: "npm:4.20.0" fast-glob: "npm:3.3.2" http-proxy: "npm:^1.18.1" http-proxy-middleware: "npm:3.0.2" @@ -5108,15 +5108,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.4.0" +"@typescript-eslint/eslint-plugin@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.5.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.4.0" - "@typescript-eslint/type-utils": "npm:8.4.0" - "@typescript-eslint/utils": "npm:8.4.0" - "@typescript-eslint/visitor-keys": "npm:8.4.0" + "@typescript-eslint/scope-manager": "npm:8.5.0" + "@typescript-eslint/type-utils": "npm:8.5.0" + "@typescript-eslint/utils": "npm:8.5.0" + "@typescript-eslint/visitor-keys": "npm:8.5.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -5127,66 +5127,66 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/c75e9bb176e9e0277c9f9c4c006bc2c31ac91984e555de1390a9bbe876e3b6787d59d96015b3f0cd083fd22c814aea4ed4858910d3afdd24d64ab79815da31e5 + checksum: 10c0/69ae7067e03d2d8d442e69d668235bdafd63b07229d0be27025eaad8aa468b5af8ac54627021e0e3a060df04ed1c39d1327a0b11469ac72405b52b74a79f402b languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/parser@npm:8.4.0" +"@typescript-eslint/parser@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/parser@npm:8.5.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.4.0" - "@typescript-eslint/types": "npm:8.4.0" - "@typescript-eslint/typescript-estree": "npm:8.4.0" - "@typescript-eslint/visitor-keys": "npm:8.4.0" + "@typescript-eslint/scope-manager": "npm:8.5.0" + "@typescript-eslint/types": "npm:8.5.0" + "@typescript-eslint/typescript-estree": "npm:8.5.0" + "@typescript-eslint/visitor-keys": "npm:8.5.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/19f3358e5bc4bbad693183eefe1a90ea64be054a934bc2c8a972ff4738b94580b55ad4955af5797db42298628caa59b3ba3f9fd960582b5fc2c836da3a4578a5 + checksum: 10c0/509fdd605b86c7d025928f20e1035712c2fc268c34b1af84248ed0b53d699034f19caf98e085c5c758d3025e29939dd12eea427c72cae9e5ea79274364851f0a languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/scope-manager@npm:8.4.0" +"@typescript-eslint/scope-manager@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/scope-manager@npm:8.5.0" dependencies: - "@typescript-eslint/types": "npm:8.4.0" - "@typescript-eslint/visitor-keys": "npm:8.4.0" - checksum: 10c0/95188c663df7db106529c6b93c4c7c61647ed34ab6dd48114e41ddf49140ff606c5501ce2ae451a988ec49b5d3874ea96ff212fc102802327b10affd2ff80a37 + "@typescript-eslint/types": "npm:8.5.0" + "@typescript-eslint/visitor-keys": "npm:8.5.0" + checksum: 10c0/868602f9324a6e15fcae017acd3b0832e9f2c8c8cd315667df37c2e7c765cda5fba7c4bede931f32cc04819ba97cf74a5fddb085c6f1c7993f1fb085ba126422 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/type-utils@npm:8.4.0" +"@typescript-eslint/type-utils@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/type-utils@npm:8.5.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.4.0" - "@typescript-eslint/utils": "npm:8.4.0" + "@typescript-eslint/typescript-estree": "npm:8.5.0" + "@typescript-eslint/utils": "npm:8.5.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ae51100594d9ca61c7577b5aed0bd10c1959725df5c38cd9653eed1fd3dbdfff9146b6e48f3409994b4c8d781b9d95025c36b30f73a5a1b3dbdee6d142cecc87 + checksum: 10c0/675d3e41f938d16e9268fd33764a4e16b12a4a9817e61d5e2508a07fe6783c69ce9d05facc61822b5647c71d767929618ed37b8b93f423f7c2ccb62cfeb4343b languageName: node linkType: hard -"@typescript-eslint/types@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/types@npm:8.4.0" - checksum: 10c0/15e09ced84827c349553530a31822f06ae5bad456c03d561b7d0c64b6ad9b5d7ca795e030bd93e65d5a2cd41bfde36ed08dcd2ff9feaa8b60a67080827f47ecb +"@typescript-eslint/types@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/types@npm:8.5.0" + checksum: 10c0/f0b666b5c001b9779bfd9e4c7d031843d07264429d5bcf5d636f26f96cd5d949a33f5d6a645b8d74b93daf565a468476a6a4935dd7135a200250fb03acbe4988 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.4.0" +"@typescript-eslint/typescript-estree@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.5.0" dependencies: - "@typescript-eslint/types": "npm:8.4.0" - "@typescript-eslint/visitor-keys": "npm:8.4.0" + "@typescript-eslint/types": "npm:8.5.0" + "@typescript-eslint/visitor-keys": "npm:8.5.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -5196,31 +5196,31 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/170702b024121cff9268f53de8054796b0ce025f9a78d6f2bc850a360e5f3f7032ba3ee9d4b7392726308273a5f3ade5ab31b1788b504b514bc15afc07302b37 + checksum: 10c0/f62f03d0c5dc57b2b54dbe1cbd027966f774f241279655f46c64145abb54b765176a0cd40447583ba56ada306181da9a82e39b777c78128e105e4ea98c609350 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/utils@npm:8.4.0" +"@typescript-eslint/utils@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/utils@npm:8.5.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.4.0" - "@typescript-eslint/types": "npm:8.4.0" - "@typescript-eslint/typescript-estree": "npm:8.4.0" + "@typescript-eslint/scope-manager": "npm:8.5.0" + "@typescript-eslint/types": "npm:8.5.0" + "@typescript-eslint/typescript-estree": "npm:8.5.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/8c9c36b3aa23f9bcc28cc4b10f0fa2996f1bc6cdd75135f08c2ef734baa30dbd2a8b92f344b90518e1fd07a486936734789fc7e90b780221a7707dad8e9c9364 + checksum: 10c0/0cb0bfdaf0da79d13c0d0379478eb14b5825d235873bc7181e70c4f6297fa1c74431ef730cbc2912fe1814dd8d46c6515ce22b39c57e8f03c337aa152fd49a4e languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.4.0": - version: 8.4.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.4.0" +"@typescript-eslint/visitor-keys@npm:8.5.0": + version: 8.5.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.5.0" dependencies: - "@typescript-eslint/types": "npm:8.4.0" + "@typescript-eslint/types": "npm:8.5.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/339199b7fbb9ac83b530d03ab25f6bc5ceb688c9cd0ae460112cd14ee78ca7284a845aef5620cdf70170980123475ec875e85ebf595c60255ba3c0d6fe48c714 + checksum: 10c0/8b9e81968ad36e8af18ac17b63c4e0764612451ca085676c939b723549052243f63577d2706bc2da48174f11bf47587ab47e6e0b7c5b28d9f3c1ef7b9aad322d languageName: node linkType: hard @@ -6716,6 +6716,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 + languageName: node + linkType: hard + "bonjour-service@npm:^1.2.1": version: 1.2.1 resolution: "bonjour-service@npm:1.2.1" @@ -8364,6 +8384,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -9186,6 +9213,45 @@ __metadata: languageName: node linkType: hard +"express@npm:4.20.0": + version: 4.20.0 + resolution: "express@npm:4.20.0" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.3" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.6.0" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.2.0" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.3" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.10" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.11.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.19.0" + serve-static: "npm:1.16.0" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10c0/626e440e9feffa3f82ebce5e7dc0ad7a74fa96079994f30048cce450f4855a258abbcabf021f691aeb72154867f0d28440a8498c62888805faf667a829fb65aa + languageName: node + linkType: hard + "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -12409,6 +12475,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 10c0/866b7094afd9293b5ea5dcd82d71f80e51514bed33b4c4e9f516795dc366612a4cbb4dc94356e943a8a6914889a914530badff27f397191b9b75cda20b6bae93 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -13832,6 +13905,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.10": + version: 0.1.10 + resolution: "path-to-regexp@npm:0.1.10" + checksum: 10c0/34196775b9113ca6df88e94c8d83ba82c0e1a2063dd33bfe2803a980da8d49b91db8104f49d5191b44ea780d46b8670ce2b7f4a5e349b0c48c6779b653f1afe4 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -14529,7 +14609,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.5.2": +"qs@npm:6.13.0, qs@npm:^6.5.2": version: 6.13.0 resolution: "qs@npm:6.13.0" dependencies: @@ -15383,6 +15463,27 @@ __metadata: languageName: node linkType: hard +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" @@ -15431,6 +15532,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:1.16.0": + version: 1.16.0 + resolution: "serve-static@npm:1.16.0" + dependencies: + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.18.0" + checksum: 10c0/d7a5beca08cc55f92998d8b87c111dd842d642404231c90c11f504f9650935da4599c13256747b0a988442a59851343271fe8e1946e03e92cd79c447b5f3ae01 + languageName: node + linkType: hard + "server-destroy@npm:1.0.1": version: 1.0.1 resolution: "server-destroy@npm:1.0.1" From 6c6248e544cac9ce81afe2b2870b668f6af84db5 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 10 Sep 2024 16:34:56 +0000 Subject: [PATCH 17/53] refactor(@angular/build): add explicit type annotations to avoid inferred types This refactor resolves an issue where the inferred type of `renderSassStylesheet` required an external reference, which could affect portability. Fixes the following error: ``` packages/angular/build/src/tools/sass/worker.ts:59:31 - error TS2742: The inferred type of 'renderSassStylesheet' cannot be named without a reference to '../../../../../../external/npm/node_modules/source-map-js/source-map'. This is likely not portable. A type annotation is necessary. ``` Explicit type annotation added to `renderSassStylesheet` function to prevent reliance on inferred types. **Note:** Ensure compatibility with Windows Bazel builds. --- .../angular/build/src/tools/sass/worker.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/angular/build/src/tools/sass/worker.ts b/packages/angular/build/src/tools/sass/worker.ts index f0d7d5cd8b06..88a2d2ecfad9 100644 --- a/packages/angular/build/src/tools/sass/worker.ts +++ b/packages/angular/build/src/tools/sass/worker.ts @@ -56,7 +56,29 @@ interface RenderRequestMessage { rebase: boolean; } -export default async function renderSassStylesheet(request: RenderRequestMessage) { +interface RenderResult { + warnings: SerializableWarningMessage[] | undefined; + result: { + css: string; + loadedUrls: string[]; + sourceMap?: RawSourceMap; + }; +} + +interface RenderError { + warnings: SerializableWarningMessage[] | undefined; + error: { + message: string; + stack?: string; + span?: Omit & { url?: string }; + sassMessage?: string; + sassStack?: string; + }; +} + +export default async function renderSassStylesheet( + request: RenderRequestMessage, +): Promise { const { importerChannel, hasLogger, source, options, rebase } = request; const entryDirectory = dirname(options.url); @@ -164,6 +186,7 @@ export default async function renderSassStylesheet(request: RenderRequestMessage warnings, result: { ...result, + sourceMap: result.sourceMap as unknown as RawSourceMap | undefined, // URL is not serializable so to convert to string here and back to URL in the parent. loadedUrls: result.loadedUrls.map((p) => fileURLToPath(p)), }, From 743188ba6265b37016527d64279ad48f448e4c37 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 11 Sep 2024 10:07:16 +0000 Subject: [PATCH 18/53] refactor: Add `lines-around-comment` rule I often struggle with spacing around block comments, so I've decided to add the `lines-around-comment` lint rule to help manage this. For more details, see the https://eslint.style/rules/js/lines-around-comment --- .eslintrc.json | 18 +++++++- package.json | 1 + .../src/builders/dev-server/vite-server.ts | 1 + .../tools/esbuild/angular/compiler-plugin.ts | 1 + .../src/tools/esbuild/i18n-inliner-worker.ts | 2 + .../stylesheets/css-inline-fonts-plugin.ts | 1 + .../stylesheets/stylesheet-plugin-factory.ts | 1 + .../tools/esbuild/virtual-module-plugin.ts | 5 +++ .../build/src/tools/esbuild/wasm-plugin.ts | 1 + .../build/src/tools/sass/sass-service.ts | 1 + .../angular/build/src/tools/sass/worker.ts | 4 ++ .../utils/index-file/augment-index-html.ts | 5 +++ .../index-file/valid-self-closing-tags.ts | 2 + .../build/src/utils/normalize-cache.ts | 2 + .../cli/src/command-builder/command-module.ts | 6 +++ .../angular/cli/src/commands/update/cli.ts | 1 + .../node/src/common-engine/common-engine.ts | 5 +++ packages/angular/ssr/src/routes/ng-routes.ts | 3 ++ .../angular/ssr/src/routes/route-config.ts | 1 + .../angular_devkit/architect/src/jobs/api.ts | 4 ++ .../src/builders/app-shell/render-worker.ts | 2 + .../plugins/javascript-optimizer-worker.ts | 7 ++++ .../webpack/plugins/postcss-cli-resources.ts | 1 + .../src/utils/normalize-cache.ts | 2 + .../schematics/angular/utility/dependency.ts | 6 +++ .../angular/utility/workspace-models.ts | 1 + scripts/build-packages-dist.mts | 1 + yarn.lock | 42 +++++++++++++++++-- 28 files changed, 122 insertions(+), 5 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 8d909f8950c9..f9727d18dd44 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,8 +33,24 @@ "project": "tsconfig.json", "sourceType": "module" }, - "plugins": ["eslint-plugin-import", "header", "@typescript-eslint"], + "plugins": ["@stylistic", "@typescript-eslint", "eslint-plugin-import", "header"], "rules": { + "@stylistic/lines-around-comment": [ + "error", + { + "allowArrayStart": true, + "allowBlockStart": true, + "allowClassStart": true, + "allowEnumStart": true, + "allowInterfaceStart": true, + "allowModuleStart": true, + "allowObjectStart": true, + "allowTypeStart": true, + "beforeBlockComment": true, + "ignorePattern": "@license" + } + ], + "@stylistic/spaced-comment": ["error", "always"], "@typescript-eslint/consistent-type-assertions": "error", "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-non-null-assertion": "error", diff --git a/package.json b/package.json index 9aa93b5a4f4e..3d7bfac7607c 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "@listr2/prompt-adapter-inquirer": "2.0.15", "@rollup/plugin-commonjs": "^26.0.0", "@rollup/plugin-node-resolve": "^13.0.5", + "@stylistic/eslint-plugin": "^2.8.0", "@types/babel__core": "7.20.5", "@types/browser-sync": "^2.27.0", "@types/express": "^4.16.0", diff --git a/packages/angular/build/src/builders/dev-server/vite-server.ts b/packages/angular/build/src/builders/dev-server/vite-server.ts index edf056e8e5e5..9706b94d36c6 100644 --- a/packages/angular/build/src/builders/dev-server/vite-server.ts +++ b/packages/angular/build/src/builders/dev-server/vite-server.ts @@ -709,6 +709,7 @@ function getDepOptimizationConfig({ } const nodeJsBuiltinModules = new Set(builtinModules); + /** Remove any Node.js builtin modules to avoid Vite's prebundling from processing them as files. */ function removeNodeJsBuiltinModules(value: string): boolean { return !nodeJsBuiltinModules.has(value); diff --git a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts index 62a74062decf..344be6fdf838 100644 --- a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts @@ -39,6 +39,7 @@ export interface CompilerPluginOptions { sourcemap: boolean | 'external'; tsconfig: string; jit?: boolean; + /** Skip TypeScript compilation setup. This is useful to re-use the TypeScript compilation from another plugin. */ noopTypeScriptCompilation?: boolean; advancedOptimizations?: boolean; diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts index 5ded64fc8936..a453b335032d 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts @@ -22,10 +22,12 @@ interface InlineRequest { * during Worker initialization. */ filename: string; + /** * The locale specifier that should be used during the inlining process of the file. */ locale: string; + /** * The translation messages for the locale that should be used during the inlining process of the file. */ diff --git a/packages/angular/build/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.ts b/packages/angular/build/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.ts index 2685cf7a0817..cbdba93c4940 100644 --- a/packages/angular/build/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.ts @@ -18,6 +18,7 @@ import { LoadResultCache, createCachedLoad } from '../load-result-cache'; export interface CssInlineFontsPluginOptions { /** Disk cache normalized options */ cacheOptions?: NormalizedCachedOptions; + /** Load results cache. */ cache?: LoadResultCache; } diff --git a/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts b/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts index 69f9ee457144..72bc83779eb7 100644 --- a/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts +++ b/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts @@ -190,6 +190,7 @@ export class StylesheetPluginFactory { } private initPostcssCallCount = 0; + /** * This method should not be called directly. * Use {@link setupPostcss} instead. diff --git a/packages/angular/build/src/tools/esbuild/virtual-module-plugin.ts b/packages/angular/build/src/tools/esbuild/virtual-module-plugin.ts index 37142e9ee4c3..7f6b3729e3fb 100644 --- a/packages/angular/build/src/tools/esbuild/virtual-module-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/virtual-module-plugin.ts @@ -16,17 +16,22 @@ import { LoadResultCache, createCachedLoad } from './load-result-cache'; export interface VirtualModulePluginOptions { /** Namespace. Example: `angular:polyfills`. */ namespace: string; + /** If the generated module should be marked as external. */ external?: boolean; + /** Method to transform the onResolve path. */ transformPath?: (path: string) => string; + /** Method to provide the module content. */ loadContent: ( args: OnLoadArgs, build: PluginBuild, ) => ReturnType[1]>; + /** Restrict to only entry points. Defaults to `true`. */ entryPointOnly?: boolean; + /** Load results cache. */ cache?: LoadResultCache; } diff --git a/packages/angular/build/src/tools/esbuild/wasm-plugin.ts b/packages/angular/build/src/tools/esbuild/wasm-plugin.ts index 7cf478013e12..3e8ad8d1063a 100644 --- a/packages/angular/build/src/tools/esbuild/wasm-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/wasm-plugin.ts @@ -21,6 +21,7 @@ import { LoadResultCache, createCachedLoad } from './load-result-cache'; export interface WasmPluginOptions { /** Allow generation of async (proposal compliant) WASM imports. This requires zoneless to enable async/await. */ allowAsync?: boolean; + /** Load results cache. */ cache?: LoadResultCache; } diff --git a/packages/angular/build/src/tools/sass/sass-service.ts b/packages/angular/build/src/tools/sass/sass-service.ts index ce6f18cadbfe..0dd2ee1065c3 100644 --- a/packages/angular/build/src/tools/sass/sass-service.ts +++ b/packages/angular/build/src/tools/sass/sass-service.ts @@ -52,6 +52,7 @@ export interface SerializableVersion { export interface SerializableDeprecation extends Omit { /** The version this deprecation first became active in. */ deprecatedIn: SerializableVersion | null; + /** The version this deprecation became obsolete in. */ obsoleteIn: SerializableVersion | null; } diff --git a/packages/angular/build/src/tools/sass/worker.ts b/packages/angular/build/src/tools/sass/worker.ts index 88a2d2ecfad9..75feb3f5e888 100644 --- a/packages/angular/build/src/tools/sass/worker.ts +++ b/packages/angular/build/src/tools/sass/worker.ts @@ -35,10 +35,12 @@ interface RenderRequestMessage { * The contents to compile. */ source: string; + /** * The Sass options to provide to the `dart-sass` compile function. */ options: Omit, 'url'> & { url: string }; + /** * Indicates the request has a custom importer function on the main thread. */ @@ -46,10 +48,12 @@ interface RenderRequestMessage { port: MessagePort; signal: Int32Array; }; + /** * Indicates the request has a custom logger for warning messages. */ hasLogger: boolean; + /** * Indicates paths within url() CSS functions should be rebased. */ diff --git a/packages/angular/build/src/utils/index-file/augment-index-html.ts b/packages/angular/build/src/utils/index-file/augment-index-html.ts index 5f487032e760..30d5f30d2b6e 100644 --- a/packages/angular/build/src/utils/index-file/augment-index-html.ts +++ b/packages/angular/build/src/utils/index-file/augment-index-html.ts @@ -24,20 +24,25 @@ export interface AugmentIndexHtmlOptions { baseHref?: string; deployUrl?: string; sri: boolean; + /** crossorigin attribute setting of elements that provide CORS support */ crossOrigin?: CrossOriginValue; + /* * Files emitted by the build. */ files: FileInfo[]; + /* * Function that loads a file used. * This allows us to use different routines within the IndexHtmlWebpackPlugin and * when used without this plugin. */ loadOutputFile: LoadOutputFileFunctionType; + /** Used to sort the inseration of files in the HTML file */ entrypoints: Entrypoint[]; + /** Used to set the document default locale */ lang?: string; hints?: { url: string; mode: string; as?: string }[]; diff --git a/packages/angular/build/src/utils/index-file/valid-self-closing-tags.ts b/packages/angular/build/src/utils/index-file/valid-self-closing-tags.ts index bd85b6ee00dd..cf791bb47918 100644 --- a/packages/angular/build/src/utils/index-file/valid-self-closing-tags.ts +++ b/packages/angular/build/src/utils/index-file/valid-self-closing-tags.ts @@ -22,6 +22,7 @@ export const VALID_SELF_CLOSING_TAGS = new Set([ 'source', 'track', 'wbr', + /** SVG tags */ 'circle', 'ellipse', @@ -45,6 +46,7 @@ export const VALID_SELF_CLOSING_TAGS = new Set([ 'symbol', 'use', 'view', + /** MathML tags */ 'mspace', 'mphantom', diff --git a/packages/angular/build/src/utils/normalize-cache.ts b/packages/angular/build/src/utils/normalize-cache.ts index 9dc7ba6ae2a6..f272f6a78e45 100644 --- a/packages/angular/build/src/utils/normalize-cache.ts +++ b/packages/angular/build/src/utils/normalize-cache.ts @@ -14,8 +14,10 @@ const VERSION = '0.0.0-PLACEHOLDER'; export interface NormalizedCachedOptions { /** Whether disk cache is enabled. */ enabled: boolean; + /** Disk cache path. Example: `/.angular/cache/v12.0.0`. */ path: string; + /** Disk cache base path. Example: `/.angular/cache`. */ basePath: string; } diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index d80da2948ca4..41785b833935 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -33,8 +33,10 @@ export type Options = { [key in keyof T as CamelCaseKey]: T[key] }; export enum CommandScope { /** Command can only run inside an Angular workspace. */ In, + /** Command can only run outside an Angular workspace. */ Out, + /** Command can run inside and outside an Angular workspace. */ Both, } @@ -46,6 +48,7 @@ export interface CommandContext { globalConfiguration: AngularWorkspace; logger: logging.Logger; packageManager: PackageManagerUtils; + /** Arguments parsed in free-from without parser configuration. */ args: { positional: string[]; @@ -63,10 +66,13 @@ export interface CommandModuleImplementation extends Omit, 'builder' | 'handler'> { /** Scope in which the command can be executed in. */ scope: CommandScope; + /** Path used to load the long description for the command in JSON help text. */ longDescriptionPath?: string; + /** Object declaring the options the command accepts, or a function accepting and returning a yargs instance. */ builder(argv: Argv): Promise> | Argv; + /** A function which will be passed the parsed argv. */ run(options: Options & OtherOptions): Promise | number | void; } diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts index b9e991e3ea4a..19a9f080d8ef 100644 --- a/packages/angular/cli/src/commands/update/cli.ts +++ b/packages/angular/cli/src/commands/update/cli.ts @@ -901,6 +901,7 @@ export default class UpdateCommandModule extends CommandModule | (() => Promise); + /** A set of platform level providers for all requests. */ providers?: StaticProvider[]; + /** Enable request performance profiling data collection and printing the results in the server console. */ enablePerformanceProfiler?: boolean; } @@ -32,16 +34,19 @@ export interface CommonEngineOptions { export interface CommonEngineRenderOptions { /** A method that when invoked returns a promise that returns an `ApplicationRef` instance once resolved or an NgModule. */ bootstrap?: Type<{}> | (() => Promise); + /** A set of platform level providers for the current request. */ providers?: StaticProvider[]; url?: string; document?: string; documentFilePath?: string; + /** * Reduce render blocking requests by inlining critical CSS. * Defaults to true. */ inlineCriticalCss?: boolean; + /** * Base path location of index file. * Defaults to the 'documentFilePath' dirname when not provided. diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index 2c3484d3f404..aba6ff30fa65 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -92,10 +92,13 @@ interface RouteResult { async function* traverseRoutesConfig(options: { /** The array of route configurations to process. */ routes: Route[]; + /** The Angular compiler used to compile route modules. */ compiler: Compiler; + /** The parent injector for lazy-loaded modules. */ parentInjector: Injector; + /** The parent route path to prefix child routes. */ parentRoute: string; }): AsyncIterableIterator { diff --git a/packages/angular/ssr/src/routes/route-config.ts b/packages/angular/ssr/src/routes/route-config.ts index cf6115aa56e5..92e78dae33e1 100644 --- a/packages/angular/ssr/src/routes/route-config.ts +++ b/packages/angular/ssr/src/routes/route-config.ts @@ -83,6 +83,7 @@ export interface ServerRouteSSG extends Omit { * Defaults to `SSGFallback.SSR` if not provided. */ fallback?: SSGFallback; + /** * A function that returns a Promise resolving to an array of objects, each representing a route path with URL parameters. * This function runs in the injector context, allowing access to Angular services and dependencies. diff --git a/packages/angular_devkit/architect/src/jobs/api.ts b/packages/angular_devkit/architect/src/jobs/api.ts index 66f7540721b8..a55223276441 100644 --- a/packages/angular_devkit/architect/src/jobs/api.ts +++ b/packages/angular_devkit/architect/src/jobs/api.ts @@ -275,20 +275,24 @@ export enum JobState { * The job was queued and is waiting to start. */ Queued = 'queued', + /** * The job description was found, its dependencies (see "Synchronizing and Dependencies") * are done running, and the job's argument is validated and the job's code will be executed. */ Ready = 'ready', + /** * The job has been started. The job implementation is expected to send this as soon as its * work is starting. */ Started = 'started', + /** * The job has ended and is done running. */ Ended = 'ended', + /** * An error occured and the job stopped because of internal state. */ diff --git a/packages/angular_devkit/build_angular/src/builders/app-shell/render-worker.ts b/packages/angular_devkit/build_angular/src/builders/app-shell/render-worker.ts index 33b3e63a9f91..2955edb4c6d0 100644 --- a/packages/angular_devkit/build_angular/src/builders/app-shell/render-worker.ts +++ b/packages/angular_devkit/build_angular/src/builders/app-shell/render-worker.ts @@ -44,10 +44,12 @@ interface RenderRequest { * The path to the server bundle that should be loaded and rendered. */ serverBundlePath: string; + /** * The existing HTML document as a string that will be augmented with the rendered application. */ document: string; + /** * An optional URL path that represents the Angular route that should be rendered. */ diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/javascript-optimizer-worker.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/javascript-optimizer-worker.ts index ae22dbbd9d9a..55cc3bcaa4fa 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/javascript-optimizer-worker.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/javascript-optimizer-worker.ts @@ -22,10 +22,12 @@ export interface OptimizeRequestOptions { * * terser pure_getters option is enabled */ advanced?: boolean; + /** * Specifies the string tokens that should be replaced with a defined value. */ define?: Record; + /** * Controls whether class, function, and variable names should be left intact * throughout the output code. @@ -37,15 +39,18 @@ export interface OptimizeRequestOptions { * Within the CLI, this option is linked to the license extraction functionality. */ removeLicenses?: boolean; + /** * Controls whether source maps should be generated. */ sourcemap?: boolean; + /** * Specifies the list of supported esbuild targets. * @see: https://esbuild.github.io/api/#target */ target?: string[]; + /** * Controls whether esbuild should only use the WASM-variant instead of trying to * use the native variant. Some platforms may not support the native-variant and @@ -71,10 +76,12 @@ interface OptimizeRequest { * The name of the JavaScript asset (typically the filename). */ name: string; + /** * The source content of the JavaScript asset. */ code: string; + /** * The source map of the JavaScript asset, if available. * This map is merged with all intermediate source maps during optimization. diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts index 496080f564ff..3dde32a42cc8 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts @@ -30,6 +30,7 @@ export interface PostcssCliResourcesOptions { deployUrl?: string; resourcesOutputPath?: string; rebaseRootRelative?: boolean; + /** CSS is extracted to a `.css` or is embedded in a `.js` file. */ extracted?: boolean; filename: (resourcePath: string) => string; diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-cache.ts b/packages/angular_devkit/build_angular/src/utils/normalize-cache.ts index 41f544b52177..d32c3a47c649 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-cache.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-cache.ts @@ -14,8 +14,10 @@ const VERSION = '0.0.0-PLACEHOLDER'; export interface NormalizedCachedOptions { /** Whether disk cache is enabled. */ enabled: boolean; + /** Disk cache path. Example: `/.angular/cache/v12.0.0`. */ path: string; + /** Disk cache base path. Example: `/.angular/cache`. */ basePath: string; } diff --git a/packages/schematics/angular/utility/dependency.ts b/packages/schematics/angular/utility/dependency.ts index 39faa8fc4da2..a5a1bdc5b5d8 100644 --- a/packages/schematics/angular/utility/dependency.ts +++ b/packages/schematics/angular/utility/dependency.ts @@ -41,11 +41,13 @@ export enum InstallBehavior { * which may install the dependency. */ None, + /** * Automatically determine the need to schedule a {@link NodePackageInstallTask} based on * previous usage of the {@link addDependency} within the schematic. */ Auto, + /** * Always schedule a {@link NodePackageInstallTask} when the rule is executed. */ @@ -62,6 +64,7 @@ export enum ExistingBehavior { * The dependency will not be added or otherwise changed if it already exists. */ Skip, + /** * The dependency's existing specifier will be replaced with the specifier provided in the * {@link addDependency} call. A warning will also be shown during schematic execution to @@ -95,17 +98,20 @@ export function addDependency( * dependency will be added. Defaults to {@link DependencyType.Default} (`dependencies`). */ type?: DependencyType; + /** * The path of the package manifest file (`package.json`) that will be modified. * Defaults to `/package.json`. */ packageJsonPath?: string; + /** * The dependency installation behavior to use to determine whether a * {@link NodePackageInstallTask} should be scheduled after adding the dependency. * Defaults to {@link InstallBehavior.Auto}. */ install?: InstallBehavior; + /** * The behavior to use when the dependency already exists within the `package.json`. * Defaults to {@link ExistingBehavior.Replace}. diff --git a/packages/schematics/angular/utility/workspace-models.ts b/packages/schematics/angular/utility/workspace-models.ts index e6672d7828ce..49330e29e2bd 100644 --- a/packages/schematics/angular/utility/workspace-models.ts +++ b/packages/schematics/angular/utility/workspace-models.ts @@ -168,6 +168,7 @@ export interface WorkspaceProject; + /** * Tool options. */ diff --git a/scripts/build-packages-dist.mts b/scripts/build-packages-dist.mts index 5a47cef2a6ec..8bb720a97f27 100644 --- a/scripts/build-packages-dist.mts +++ b/scripts/build-packages-dist.mts @@ -162,6 +162,7 @@ function getPackageNamesOfTargets(targets: string[]): string[] { /** Executes the given command in the project directory. */ function exec(command: string): void; + /** Executes the given command in the project directory and returns its stdout. */ function exec(command: string, captureStdout: true): string; function exec(command: string, captureStdout?: true) { diff --git a/yarn.lock b/yarn.lock index 03d317185ba0..8705b4cebc84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -666,6 +666,7 @@ __metadata: "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@rollup/plugin-commonjs": "npm:^26.0.0" "@rollup/plugin-node-resolve": "npm:^13.0.5" + "@stylistic/eslint-plugin": "npm:^2.8.0" "@types/babel__core": "npm:7.20.5" "@types/browser-sync": "npm:^2.27.0" "@types/express": "npm:^4.16.0" @@ -4238,6 +4239,21 @@ __metadata: languageName: node linkType: hard +"@stylistic/eslint-plugin@npm:^2.8.0": + version: 2.8.0 + resolution: "@stylistic/eslint-plugin@npm:2.8.0" + dependencies: + "@typescript-eslint/utils": "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.1.0" + estraverse: "npm:^5.3.0" + picomatch: "npm:^4.0.2" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/e85fc3ecad6df8b18e4c8e25ae4dfb330565efe5b91176fa84ec0fb636f07b1efa75eddc91fb36d146fc983a3538efc294f04d4b5636b3a708da123c70470671 + languageName: node + linkType: hard + "@tootallnate/quickjs-emscripten@npm:^0.23.0": version: 0.23.0 resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0" @@ -5200,7 +5216,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.5.0": +"@typescript-eslint/utils@npm:8.5.0, @typescript-eslint/utils@npm:^8.4.0": version: 8.5.0 resolution: "@typescript-eslint/utils@npm:8.5.0" dependencies: @@ -5914,7 +5930,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.11.0, acorn@npm:^8.12.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -8979,6 +8995,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5 + languageName: node + linkType: hard + "eslint@npm:8.57.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -9027,6 +9050,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.1.0": + version: 10.1.0 + resolution: "espree@npm:10.1.0" + dependencies: + acorn: "npm:^8.12.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.0.0" + checksum: 10c0/52e6feaa77a31a6038f0c0e3fce93010a4625701925b0715cd54a2ae190b3275053a0717db698697b32653788ac04845e489d6773b508d6c2e8752f3c57470a0 + languageName: node + linkType: hard + "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -9073,7 +9107,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 @@ -13972,7 +14006,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:4.0.2": +"picomatch@npm:4.0.2, picomatch@npm:^4.0.2": version: 4.0.2 resolution: "picomatch@npm:4.0.2" checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc From 4153a6ecf6707729a4f0c6a620eeb8d6916588df Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 11 Sep 2024 12:05:01 +0000 Subject: [PATCH 19/53] fix(@angular/build): prevent transformation of Node.js internal dependencies by Vite This commit excludes Node.js module imports from being processed by Vite when prebundling is enabled. Closes #28390 --- .../src/builders/dev-server/vite-server.ts | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/angular/build/src/builders/dev-server/vite-server.ts b/packages/angular/build/src/builders/dev-server/vite-server.ts index 9706b94d36c6..cd9a07e81fc8 100644 --- a/packages/angular/build/src/builders/dev-server/vite-server.ts +++ b/packages/angular/build/src/builders/dev-server/vite-server.ts @@ -42,6 +42,11 @@ interface OutputFileRecord { type: BuildOutputFileType; } +interface DevServerExternalResultMetadata extends Omit { + explicitBrowser: string[]; + explicitServer: string[]; +} + export type BuilderAction = ( options: ApplicationBuilderInternalOptions, context: BuilderContext, @@ -140,10 +145,11 @@ export async function* serveWithVite( let hadError = false; const generatedFiles = new Map(); const assetFiles = new Map(); - const externalMetadata: ExternalResultMetadata = { + const externalMetadata: DevServerExternalResultMetadata = { implicitBrowser: [], implicitServer: [], - explicit: [], + explicitBrowser: [], + explicitServer: [], }; // Add cleanup logic via a builder teardown. @@ -236,17 +242,20 @@ export async function* serveWithVite( } // Empty Arrays to avoid growing unlimited with every re-build. - externalMetadata.explicit.length = 0; + externalMetadata.explicitBrowser.length = 0; + externalMetadata.explicitServer.length = 0; externalMetadata.implicitServer.length = 0; externalMetadata.implicitBrowser.length = 0; - externalMetadata.explicit.push(...explicit); + externalMetadata.explicitBrowser.push(...explicit); + externalMetadata.explicitServer.push(...explicit, ...nodeJsBuiltinModules); externalMetadata.implicitServer.push(...implicitServerFiltered); externalMetadata.implicitBrowser.push(...implicitBrowserFiltered); // The below needs to be sorted as Vite uses these options are part of the hashing invalidation algorithm. // See: https://github.com/vitejs/vite/blob/0873bae0cfe0f0718ad2f5743dd34a17e4ab563d/packages/vite/src/node/optimizer/index.ts#L1203-L1239 - externalMetadata.explicit.sort(); + externalMetadata.explicitBrowser.sort(); + externalMetadata.explicitServer.sort(); externalMetadata.implicitServer.sort(); externalMetadata.implicitBrowser.sort(); } @@ -494,7 +503,7 @@ export async function setupServer( outputFiles: Map, assets: Map, preserveSymlinks: boolean | undefined, - externalMetadata: ExternalResultMetadata, + externalMetadata: DevServerExternalResultMetadata, ssr: boolean, prebundleTransformer: JavaScriptTransformer, target: string[], @@ -573,18 +582,18 @@ export async function setupServer( }, // This is needed when `externalDependencies` is used to prevent Vite load errors. // NOTE: If Vite adds direct support for externals, this can be removed. - preTransformRequests: externalMetadata.explicit.length === 0, + preTransformRequests: externalMetadata.explicitBrowser.length === 0, }, ssr: { // Note: `true` and `/.*/` have different sematics. When true, the `external` option is ignored. noExternal: /.*/, // Exclude any Node.js built in module and provided dependencies (currently build defined externals) - external: externalMetadata.explicit, + external: externalMetadata.explicitServer, optimizeDeps: getDepOptimizationConfig({ // Only enable with caching since it causes prebundle dependencies to be cached disabled: serverOptions.prebundle === false, // Exclude any explicitly defined dependencies (currently build defined externals and node.js built-ins) - exclude: externalMetadata.explicit, + exclude: externalMetadata.explicitServer, // Include all implict dependencies from the external packages internal option include: externalMetadata.implicitServer, ssr: true, @@ -603,19 +612,19 @@ export async function setupServer( outputFiles, assets, ssr, - external: externalMetadata.explicit, + external: externalMetadata.explicitBrowser, indexHtmlTransformer, extensionMiddleware, normalizePath, }), - createRemoveIdPrefixPlugin(externalMetadata.explicit), + createRemoveIdPrefixPlugin(externalMetadata.explicitBrowser), ], // Browser only optimizeDeps. (This does not run for SSR dependencies). optimizeDeps: getDepOptimizationConfig({ // Only enable with caching since it causes prebundle dependencies to be cached disabled: serverOptions.prebundle === false, // Exclude any explicitly defined dependencies (currently build defined externals) - exclude: externalMetadata.explicit, + exclude: externalMetadata.explicitBrowser, // Include all implict dependencies from the external packages internal option include: externalMetadata.implicitBrowser, ssr: false, From 99ee012b16a99b9a888262df8c95ae0df97922db Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 11 Sep 2024 14:01:47 +0000 Subject: [PATCH 20/53] docs: release notes for the v18.2.4 release --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bacc64af467..56fe576f3aba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ + + +# 18.2.4 (2024-09-11) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [765309a2e](https://github.com/angular/angular-cli/commit/765309a2e1bcd3bb07ff87062fc2dc04e4bce16f) | fix | prevent transformation of Node.js internal dependencies by Vite | + + + # 19.0.0-next.3 (2024-09-04) From af6e20063dedc00cb7c618a1c1e691cf0cbe2f8c Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 11 Sep 2024 16:16:48 +0000 Subject: [PATCH 21/53] release: cut the v19.0.0-next.4 release --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56fe576f3aba..c182dd269e0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,30 @@ + + +# 19.0.0-next.4 (2024-09-11) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------ | +| [201b60e1d](https://github.com/angular/angular-cli/commit/201b60e1dd25b4abb7670e21d103b67d4eda0e14) | feat | handle string key/value pairs, e.g. --define | +| [ecc107d83](https://github.com/angular/angular-cli/commit/ecc107d83bfdfd9d5dd1087e264892d60361625c) | perf | enable Node.js compile code cache when available | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [4153a6ecf](https://github.com/angular/angular-cli/commit/4153a6ecf6707729a4f0c6a620eeb8d6916588df) | fix | prevent transformation of Node.js internal dependencies by Vite | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------------------------------------- | +| [41fb2ed86](https://github.com/angular/angular-cli/commit/41fb2ed86056306406832317178ca5d94aa110e2) | feat | Add `getHeaders` Method to `AngularAppEngine` and `AngularNodeAppEngine` for handling pages static headers | +| [576ff604c](https://github.com/angular/angular-cli/commit/576ff604cd739a9f41d588fa093ca2568e46826c) | feat | introduce `AngularNodeAppEngine` API for Node.js integration | +| [e9c9e4995](https://github.com/angular/angular-cli/commit/e9c9e4995e39d9d62d10fe0497e0b98127bc8afa) | fix | resolve circular dependency issue from main.server.js reference in manifest | + + + # 18.2.4 (2024-09-11) diff --git a/package.json b/package.json index 3d7bfac7607c..41a1491bdcd3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "19.0.0-next.3", + "version": "19.0.0-next.4", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 78f76485fe315ffd0262c1a3732092731235828b Mon Sep 17 00:00:00 2001 From: Jan Martin Date: Wed, 11 Sep 2024 14:46:49 -0700 Subject: [PATCH 22/53] feat(@angular-devkit/architect): merge object options from CLI We recently introduced the ability to pass object values from the command line (#28362). @clydin noticed that the initial behavior didn't work well for `--define`: It completely replaced all values even if just one of multiple defines is specified. This updates the architect to support merging of object options. If both the base option (e.g. from `angular.json`) and the override (e.g. from a CLI `--flag`) are objects, the objects are merged. See: https://github.com/angular/angular-cli/pull/28362 --- .../angular_devkit/architect/src/architect.ts | 6 +- .../angular_devkit/architect/src/options.ts | 39 +++++++++++ .../architect/src/options_spec.ts | 70 +++++++++++++++++++ 3 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 packages/angular_devkit/architect/src/options.ts create mode 100644 packages/angular_devkit/architect/src/options_spec.ts diff --git a/packages/angular_devkit/architect/src/architect.ts b/packages/angular_devkit/architect/src/architect.ts index 56f2b26d4e7c..aecbeb06ea05 100644 --- a/packages/angular_devkit/architect/src/architect.ts +++ b/packages/angular_devkit/architect/src/architect.ts @@ -45,6 +45,7 @@ import { SimpleScheduler, createJobHandler, } from './jobs'; +import { mergeOptions } from './options'; import { scheduleByName, scheduleByTarget } from './schedule-by-name'; const inputSchema = require('./input-schema.json'); @@ -71,10 +72,7 @@ function _createJobHandlerFromBuilderInfo( concatMap(async (message) => { if (message.kind === JobInboundMessageKind.Input) { const v = message.value as BuilderInput; - const options = { - ...baseOptions, - ...v.options, - }; + const options = mergeOptions(baseOptions, v.options); // Validate v against the options schema. const validation = await registry.compile(info.optionSchema); diff --git a/packages/angular_devkit/architect/src/options.ts b/packages/angular_devkit/architect/src/options.ts new file mode 100644 index 000000000000..c3455d1f43a9 --- /dev/null +++ b/packages/angular_devkit/architect/src/options.ts @@ -0,0 +1,39 @@ +/** + * @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.dev/license + */ + +import { json } from '@angular-devkit/core'; + +import { BuilderInput } from './api'; + +type OverrideOptions = BuilderInput['options']; + +export function mergeOptions( + baseOptions: json.JsonObject, + overrideOptions: OverrideOptions, +): json.JsonObject { + if (!overrideOptions) { + return { ...baseOptions }; + } + + const options = { + ...baseOptions, + ...overrideOptions, + }; + + // For object-object overrides, we merge one layer deep. + for (const key of Object.keys(overrideOptions)) { + const override = overrideOptions[key]; + const base = baseOptions[key]; + + if (json.isJsonObject(base) && json.isJsonObject(override)) { + options[key] = { ...base, ...override }; + } + } + + return options; +} diff --git a/packages/angular_devkit/architect/src/options_spec.ts b/packages/angular_devkit/architect/src/options_spec.ts new file mode 100644 index 000000000000..ac84ed7ff747 --- /dev/null +++ b/packages/angular_devkit/architect/src/options_spec.ts @@ -0,0 +1,70 @@ +/** + * @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.dev/license + */ + +import { mergeOptions } from './options'; + +describe('mergeOptions', () => { + it('overwrites literal values', () => { + expect( + mergeOptions( + { + onlyBase: 'base', + a: 'foo', + b: 42, + c: true, + }, + { + onlyOverride: 'override', + a: 'bar', + b: 43, + c: false, + }, + ), + ).toEqual({ + onlyBase: 'base', + a: 'bar', + b: 43, + c: false, + onlyOverride: 'override', + }); + }); + + it('merges object values one layer deep', () => { + expect( + mergeOptions( + { + obj: { + nested: { + fromBase: true, + }, + fromBase: true, + overridden: false, + }, + }, + { + obj: { + nested: { + fromOverride: true, + }, + overridden: true, + fromOverride: true, + }, + }, + ), + ).toEqual({ + obj: { + nested: { + fromOverride: true, + }, + fromBase: true, + overridden: true, + fromOverride: true, + }, + }); + }); +}); From 52f4aa1df2c22751851a00406a54618c2116fb18 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 12 Sep 2024 09:11:02 +0000 Subject: [PATCH 23/53] build: update angular --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 42 +-- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/pr.yml | 34 +- package.json | 28 +- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- tests/legacy-cli/e2e/ng-snapshot/package.json | 32 +- yarn.lock | 322 +++++++++++------- 10 files changed, 272 insertions(+), 210 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 78906c257be9..ab692e8431ce 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@f94b28a2dd29a401282aaca4ded27278a854f0d9 + - uses: angular/dev-infra/github-actions/branch-manager@c5c42d9aebafe965a8fa85eefd8b4819322f092e with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0ab9cce6dc28..8a67a844e944 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Generate JSON schema types @@ -42,11 +42,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -56,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -90,13 +90,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} @@ -149,13 +149,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -182,11 +182,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - run: yarn admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 03a1c372485b..aee2b1017aa4 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@f94b28a2dd29a401282aaca4ded27278a854f0d9 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@c5c42d9aebafe965a8fa85eefd8b4819322f092e with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/post-approval-changes@f94b28a2dd29a401282aaca4ded27278a854f0d9 + - uses: angular/dev-infra/github-actions/post-approval-changes@c5c42d9aebafe965a8fa85eefd8b4819322f092e with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index 6827ef7b363d..92c8799df766 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@f94b28a2dd29a401282aaca4ded27278a854f0d9 + - uses: angular/dev-infra/github-actions/feature-request@c5c42d9aebafe965a8fa85eefd8b4819322f092e with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d8af87886966..9a4a81b15551 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup ESLint Caching uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: @@ -54,7 +54,7 @@ jobs: - name: Run Validation run: yarn admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/linting/licenses@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Check tooling setup run: yarn check-tooling-setup - name: Check commit message @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -90,11 +90,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -155,12 +155,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@f94b28a2dd29a401282aaca4ded27278a854f0d9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/package.json b/package.json index 41a1491bdcd3..9a25c846b3d0 100644 --- a/package.json +++ b/package.json @@ -52,23 +52,23 @@ }, "devDependencies": { "@ampproject/remapping": "2.3.0", - "@angular/animations": "19.0.0-next.3", + "@angular/animations": "19.0.0-next.5", "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239", "@angular/cdk": "19.0.0-next.3", - "@angular/common": "19.0.0-next.3", - "@angular/compiler": "19.0.0-next.3", - "@angular/compiler-cli": "19.0.0-next.3", - "@angular/core": "19.0.0-next.3", - "@angular/forms": "19.0.0-next.3", - "@angular/localize": "19.0.0-next.3", + "@angular/common": "19.0.0-next.5", + "@angular/compiler": "19.0.0-next.5", + "@angular/compiler-cli": "19.0.0-next.5", + "@angular/core": "19.0.0-next.5", + "@angular/forms": "19.0.0-next.5", + "@angular/localize": "19.0.0-next.5", "@angular/material": "19.0.0-next.3", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725", - "@angular/platform-browser": "19.0.0-next.3", - "@angular/platform-browser-dynamic": "19.0.0-next.3", - "@angular/platform-server": "19.0.0-next.3", - "@angular/router": "19.0.0-next.3", - "@angular/service-worker": "19.0.0-next.3", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c", + "@angular/platform-browser": "19.0.0-next.5", + "@angular/platform-browser-dynamic": "19.0.0-next.5", + "@angular/platform-server": "19.0.0-next.5", + "@angular/router": "19.0.0-next.5", + "@angular/service-worker": "19.0.0-next.5", "@babel/core": "7.25.2", "@babel/generator": "7.25.6", "@babel/helper-annotate-as-pure": "7.24.7", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 10ac1e99fac6..26aed047e51c 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -22,12 +22,12 @@ "@angular/router": "^19.0.0-next.0" }, "devDependencies": { - "@angular/common": "19.0.0-next.3", - "@angular/compiler": "19.0.0-next.3", - "@angular/core": "19.0.0-next.3", - "@angular/platform-browser": "19.0.0-next.3", - "@angular/platform-server": "19.0.0-next.3", - "@angular/router": "19.0.0-next.3", + "@angular/common": "19.0.0-next.5", + "@angular/compiler": "19.0.0-next.5", + "@angular/core": "19.0.0-next.5", + "@angular/platform-browser": "19.0.0-next.5", + "@angular/platform-server": "19.0.0-next.5", + "@angular/router": "19.0.0-next.5", "@bazel/runfiles": "^5.8.1" }, "schematics": "./schematics/collection.json", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index b5d7d974a419..abf4c8006318 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular/compiler": "19.0.0-next.3", - "@angular/compiler-cli": "19.0.0-next.3", + "@angular/compiler": "19.0.0-next.5", + "@angular/compiler-cli": "19.0.0-next.5", "typescript": "5.6.2", "webpack": "5.94.0" } diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index 08315e7c6487..de1b95680a9a 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#f7dc71269374aa3149354d0ef7a3d466ef2b7150", - "@angular/cdk": "github:angular/cdk-builds#87d90c0f035464b09d1ed577020564d4293a838a", - "@angular/common": "github:angular/common-builds#08c3745bc4625ce743042045ffb7f94dd2e7fade", - "@angular/compiler": "github:angular/compiler-builds#0d91eb89eeb09fc7567718b01bfdb5bdec6abf53", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#faa78732c3e695d46dab7791c6fe88f8573ae441", - "@angular/core": "github:angular/core-builds#96f78bc060335523887b705f6143545ca95b0733", - "@angular/forms": "github:angular/forms-builds#315801c21ae7a649fc00d316744a4592f9167e96", - "@angular/language-service": "github:angular/language-service-builds#b4cd8d02f45119a15f5685a9d8458c6f9a7a0fd0", - "@angular/localize": "github:angular/localize-builds#d0c2c0055fc442ec963520b51e499dd09841395f", - "@angular/material": "github:angular/material-builds#b13ad9cb4d042d2851742994b392220489fb3280", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#82597d093549522d3f1a212a5497622a061d6ae6", - "@angular/platform-browser": "github:angular/platform-browser-builds#8efcf18c1f8b5224b8d140c290c1f584394fb940", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#77604116a46ba4c334701742ba093d6a5cfbb493", - "@angular/platform-server": "github:angular/platform-server-builds#ca55e94047607504c5c59d2605caa7f8c86f5a98", - "@angular/router": "github:angular/router-builds#efa4bb0b74eb665472fe7638468f7271481e80ee", - "@angular/service-worker": "github:angular/service-worker-builds#4ebc7c42e00b457de75dd47851c557b58d0d6bab" + "@angular/animations": "github:angular/animations-builds#caa6747ec30138894bb6191ce91967ec4bb69e4c", + "@angular/cdk": "github:angular/cdk-builds#835d8c9d5a9903eb0beb27dbd139ba6447920e4b", + "@angular/common": "github:angular/common-builds#07d541b6b8d7dbfc874592ffe8e7d814954eb28d", + "@angular/compiler": "github:angular/compiler-builds#d5048f054c34a3ed17675c99c963ba220fb653d0", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#a92d790f27d7ad977dcd105fd0e9ebf4cb082c07", + "@angular/core": "github:angular/core-builds#076811f105c932ec2af0305faadae8126200d0af", + "@angular/forms": "github:angular/forms-builds#bbc5d0c4f92ae405cb0c8660d8498ae733c18b01", + "@angular/language-service": "github:angular/language-service-builds#48971df741a983edfc78d1d21c18ef8f198c0a37", + "@angular/localize": "github:angular/localize-builds#f50d77b34465abf9215f64b9eb12f6e7f3aa2669", + "@angular/material": "github:angular/material-builds#7fee86a9d0fea62deb6ceb4346a036b9d4ad7b76", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#f6dcf6bb5f33d76b15141945b32facb3722dc877", + "@angular/platform-browser": "github:angular/platform-browser-builds#99b704989cc8e91b473310bae378552e90feccad", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#e31a2fb543024c29d7d496fb3b599fc91e5775d8", + "@angular/platform-server": "github:angular/platform-server-builds#a3ae0f6c3ca611294473d2a1685cccfba7a74c52", + "@angular/router": "github:angular/router-builds#a214bd9ffd5ee647a3735faa53eba66f37e9068e", + "@angular/service-worker": "github:angular/service-worker-builds#d74de393f4ab45f69f64d9f55237c6b8b7425324" } } diff --git a/yarn.lock b/yarn.lock index 8705b4cebc84..dd7e796e8b3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -252,14 +252,14 @@ __metadata: languageName: unknown linkType: soft -"@angular/animations@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/animations@npm:19.0.0-next.3" +"@angular/animations@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/animations@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.3 - checksum: 10c0/b461af99eb73eea8dbc0c4978ba16c4d3d6d607c8e119454acbf8eca955ad0302afaebf95747249c3b2d44c974a33780b6feb0e65c77204d43f4a095c4f8ec15 + "@angular/core": 19.0.0-next.5 + checksum: 10c0/79cbfeac4d87f4c079d65243e0b9bc8135fc5d29ac1cdee92ef5ac86dde054d32a63a21d9d764b2c299173f6926ad1bf189542c643db37ef201c67e1506c5efb languageName: node linkType: hard @@ -331,9 +331,9 @@ __metadata: languageName: node linkType: hard -"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c": - version: 0.0.0-f94b28a2dd29a401282aaca4ded27278a854f0d9 - resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c" +"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239": + version: 0.0.0-c5c42d9aebafe965a8fa85eefd8b4819322f092e + resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=c3526b58a5154ba4d63622759be2d86081a45239" dependencies: "@angular/benchpress": "npm:0.3.0" "@angular/build": "npm:19.0.0-next.3" @@ -347,7 +347,7 @@ __metadata: "@bazel/runfiles": "npm:5.8.1" "@bazel/terser": "npm:5.8.1" "@bazel/typescript": "npm:5.8.1" - "@microsoft/api-extractor": "npm:7.47.7" + "@microsoft/api-extractor": "npm:7.47.8" "@types/browser-sync": "npm:^2.26.3" "@types/minimatch": "npm:^5.1.2" "@types/node": "npm:^18.19.21" @@ -362,18 +362,18 @@ __metadata: prettier: "npm:3.3.3" protractor: "npm:^7.0.0" selenium-webdriver: "npm:^4.18.1" - send: "npm:^0.18.0" + send: "npm:^0.19.0" source-map: "npm:^0.7.4" tmp: "npm:^0.2.1" true-case-path: "npm:^2.2.1" tslib: "npm:^2.5.2" - typescript: "npm:5.5.4" + typescript: "npm:5.6.2" uuid: "npm:^10.0.0" yargs: "npm:^17.0.0" dependenciesMeta: re2: built: false - checksum: 10c0/3e333fccf24ce9d9c1ecc56408cb966a95286586e5cfad12e7a75796d97d697335289bef4c0b9d13c6dc32cf884f1f41c7eb7aaae95c889eddb274d5887bcfb7 + checksum: 10c0/a7a45c0050b11a4f180884c3c234e8321ed36674643f3da02bc1a087abf877b467a7c9f4e13bf7fc9f37bf1f2d18dc256b9d70ea51df5abfe4d2105026dcc570 languageName: node linkType: hard @@ -540,21 +540,21 @@ __metadata: languageName: unknown linkType: soft -"@angular/common@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/common@npm:19.0.0-next.3" +"@angular/common@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/common@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.3 + "@angular/core": 19.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/72ee647972488814ad437305136bff2fbb18660fe4edd7be501a7e028528a4565b76e7a1efd53c7495c4982d94dfa844631405d1893485e27764a7d7eba57c5e + checksum: 10c0/014054366005552256fe6f61ade5771225a9643d580853d4d6f537dd608d3bec60871006091ebb59be1a4ad023534011408abcfa49f83a5f7341aea188b6eba2 languageName: node linkType: hard -"@angular/compiler-cli@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/compiler-cli@npm:19.0.0-next.3" +"@angular/compiler-cli@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/compiler-cli@npm:19.0.0-next.5" dependencies: "@babel/core": "npm:7.25.2" "@jridgewell/sourcemap-codec": "npm:^1.4.14" @@ -565,39 +565,39 @@ __metadata: tslib: "npm:^2.3.0" yargs: "npm:^17.2.1" peerDependencies: - "@angular/compiler": 19.0.0-next.3 + "@angular/compiler": 19.0.0-next.5 typescript: ">=5.5 <5.7" bin: ng-xi18n: bundles/src/bin/ng_xi18n.js ngc: bundles/src/bin/ngc.js ngcc: bundles/ngcc/index.js - checksum: 10c0/d075aad3b0eb77a608361c909004b5244e0fa538e13f9a04b6ba1018a260e48d00bdd48e70b924a802cb55181cfd48dd52b606df17cdc919488d78f54453d041 + checksum: 10c0/4652476d08940f05ddedac8c1939c8823caf0a0da26f8abdf9e4184a874665e8cb9c3eca2a3aa9f5e8df183188aa4fc2af88595fe0237014d0da8af90e37492c languageName: node linkType: hard -"@angular/compiler@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/compiler@npm:19.0.0-next.3" +"@angular/compiler@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/compiler@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.3 + "@angular/core": 19.0.0-next.5 peerDependenciesMeta: "@angular/core": optional: true - checksum: 10c0/e5daeef7a8a500a13dbc76d2a889021ec756446c95e620885c13670b476bb5df081ca33f1ee257feb1f81bfcee7b0b4005f722fbd101faf4b2a0327cbe2a23e9 + checksum: 10c0/14293a80b348206afd386c4e549900128a4df626218c7bd95b6b8b8b93b46139cd9c40219ae89e145482bcdbfa991948259df399f6fe37f33505c98b7a043f24 languageName: node linkType: hard -"@angular/core@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/core@npm:19.0.0-next.3" +"@angular/core@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/core@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 - checksum: 10c0/2a727f01b7a3a03c618bb86304d6597dd56001d010b3965286bb950046af716dc8cf507c3aeb65d975a205aad026e557d2363b90012cfbd1618b2273f0fedcd1 + checksum: 10c0/913e79663353f74a83eda26fecaaebb89c82d0299ca46060747bdf1bbefd0713c92b6982bac512d399dddc5a79ffb31680391e396e8a674b876168a31f078c40 languageName: node linkType: hard @@ -628,23 +628,23 @@ __metadata: resolution: "@angular/devkit-repo@workspace:." dependencies: "@ampproject/remapping": "npm:2.3.0" - "@angular/animations": "npm:19.0.0-next.3" + "@angular/animations": "npm:19.0.0-next.5" "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch" - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#f8ecd6bda6116ad70be1d224cec5c03bc8e2cf7c" + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239" "@angular/cdk": "npm:19.0.0-next.3" - "@angular/common": "npm:19.0.0-next.3" - "@angular/compiler": "npm:19.0.0-next.3" - "@angular/compiler-cli": "npm:19.0.0-next.3" - "@angular/core": "npm:19.0.0-next.3" - "@angular/forms": "npm:19.0.0-next.3" - "@angular/localize": "npm:19.0.0-next.3" + "@angular/common": "npm:19.0.0-next.5" + "@angular/compiler": "npm:19.0.0-next.5" + "@angular/compiler-cli": "npm:19.0.0-next.5" + "@angular/core": "npm:19.0.0-next.5" + "@angular/forms": "npm:19.0.0-next.5" + "@angular/localize": "npm:19.0.0-next.5" "@angular/material": "npm:19.0.0-next.3" - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725" - "@angular/platform-browser": "npm:19.0.0-next.3" - "@angular/platform-browser-dynamic": "npm:19.0.0-next.3" - "@angular/platform-server": "npm:19.0.0-next.3" - "@angular/router": "npm:19.0.0-next.3" - "@angular/service-worker": "npm:19.0.0-next.3" + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c" + "@angular/platform-browser": "npm:19.0.0-next.5" + "@angular/platform-browser-dynamic": "npm:19.0.0-next.5" + "@angular/platform-server": "npm:19.0.0-next.5" + "@angular/router": "npm:19.0.0-next.5" + "@angular/service-worker": "npm:19.0.0-next.5" "@babel/core": "npm:7.25.2" "@babel/generator": "npm:7.25.6" "@babel/helper-annotate-as-pure": "npm:7.24.7" @@ -798,36 +798,36 @@ __metadata: languageName: unknown linkType: soft -"@angular/forms@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/forms@npm:19.0.0-next.3" +"@angular/forms@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/forms@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 - "@angular/platform-browser": 19.0.0-next.3 + "@angular/common": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 + "@angular/platform-browser": 19.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/eb5f058943d3b623129bd7e11a2c0362252917e83bc9978732ca84f4015ce56ba286f23d2ef61f6449376317d96cf62486bbaad9e57e8d09117ed338c8781657 + checksum: 10c0/2805c0daa2068935833458ef84eaddff32006dc9307d29ba86a3c7c540d7bfee4eb72ce5b18caae92154628f509c1d4dcf6630e8df35d665075f4c68f8e9dc43 languageName: node linkType: hard -"@angular/localize@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/localize@npm:19.0.0-next.3" +"@angular/localize@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/localize@npm:19.0.0-next.5" dependencies: "@babel/core": "npm:7.25.2" "@types/babel__core": "npm:7.20.5" fast-glob: "npm:3.3.2" yargs: "npm:^17.2.1" peerDependencies: - "@angular/compiler": 19.0.0-next.3 - "@angular/compiler-cli": 19.0.0-next.3 + "@angular/compiler": 19.0.0-next.5 + "@angular/compiler-cli": 19.0.0-next.5 bin: localize-extract: tools/bundles/src/extract/cli.js localize-migrate: tools/bundles/src/migrate/cli.js localize-translate: tools/bundles/src/translate/cli.js - checksum: 10c0/7ac09420af00b828ecd2e0f0e9a0b64f6c469c8cd60489acd8a480dbc833fa724f829405c563102d995cb7f76da38d06d60b07827b2ee5c99ca14b282a0eb575 + checksum: 10c0/1374495b97cca160af4a4776011bc841a32122900a4cf783a9f7082ea872ef2bab0676f9636e501f049787d9422996f949f30ce4fd8b136a494b2c06cd6e07ed languageName: node linkType: hard @@ -848,9 +848,9 @@ __metadata: languageName: node linkType: hard -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#026c48689806b9c1df3e358e93c988d3944c5725": - version: 0.0.0-f94b28a2dd29a401282aaca4ded27278a854f0d9 - resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=026c48689806b9c1df3e358e93c988d3944c5725" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c": + version: 0.0.0-c5c42d9aebafe965a8fa85eefd8b4819322f092e + resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=ac7e9c64990cb0a4d1390184734b3e00e1eee41c" dependencies: "@octokit/rest": "npm:21.0.2" "@types/semver": "npm:^7.3.6" @@ -864,53 +864,53 @@ __metadata: yaml: "npm:2.5.1" bin: ng-dev: ./bundles/cli.mjs - checksum: 10c0/b9b895d08259238bbe55a1fc9d785191378f86095f7a5987382aa1bf3d508a9568bf2e0bcce640f201be0fd04e1a16c4a6ed8f3ae05e898c98523e4bfea7f4e0 + checksum: 10c0/c0230774235c5a0f232a7ca8a6edb2bc0baf63ce48ad44b55c6ca94c3bff5bd0b462a1683efee6cf5cec09d7b9407f2847525eb5a3b8943b630e4202d5a42a82 languageName: node linkType: hard -"@angular/platform-browser-dynamic@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/platform-browser-dynamic@npm:19.0.0-next.3" +"@angular/platform-browser-dynamic@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/platform-browser-dynamic@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.3 - "@angular/compiler": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 - "@angular/platform-browser": 19.0.0-next.3 - checksum: 10c0/8a5eac4fec31aca8abf9855a2a474ccf38e012a84db3438ca982da74e137453a5ff49187e8c835fcef8f174de42eda4e918bcc755d71e27eb7fff84ee8d12a09 + "@angular/common": 19.0.0-next.5 + "@angular/compiler": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 + "@angular/platform-browser": 19.0.0-next.5 + checksum: 10c0/8de4720b948bfed7b01f5936a9d0c99d473f6f5d174f7419906048a3fd3a2fee5c0619b1912c8b17223121d658d905cbc2dbfbc1b608bfb2235905598c6c1a92 languageName: node linkType: hard -"@angular/platform-browser@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/platform-browser@npm:19.0.0-next.3" +"@angular/platform-browser@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/platform-browser@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/animations": 19.0.0-next.3 - "@angular/common": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 + "@angular/animations": 19.0.0-next.5 + "@angular/common": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 peerDependenciesMeta: "@angular/animations": optional: true - checksum: 10c0/93bfde9fbc69eeab738765879810796f35f554e76b3af94d61a6276fa67089cf517047cdad0dcdb001f8df5415dca636ff7a96580cff9b04056f221231430276 + checksum: 10c0/0511a1ba7899b146aaffb80a5231f37cf4d3ba4d8517e9a7cad89fdba5c00d4e8d1d5931c5a0f6cd821bf9c8b8f8f8d3fec972799f0195fcfef5bd1d6af71ca8 languageName: node linkType: hard -"@angular/platform-server@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/platform-server@npm:19.0.0-next.3" +"@angular/platform-server@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/platform-server@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" xhr2: "npm:^0.2.0" peerDependencies: - "@angular/animations": 19.0.0-next.3 - "@angular/common": 19.0.0-next.3 - "@angular/compiler": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 - "@angular/platform-browser": 19.0.0-next.3 - checksum: 10c0/2203de7b09e2d65b8f7288126dd667f6cc83499e701c7ceab4d9886a9f7a64b674a717535f2c0565b150d7d9ab4b88d948ad5f24cbbf6ff5ceb661469cb1cdd5 + "@angular/animations": 19.0.0-next.5 + "@angular/common": 19.0.0-next.5 + "@angular/compiler": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 + "@angular/platform-browser": 19.0.0-next.5 + checksum: 10c0/a041c5b8c622528caf933e64dc81008569c155f2d91d435e0517697d5d231b1f35146d3c0762ceffd82251e9c69559a4914c6c6641beb40b454e49abc5f39907 languageName: node linkType: hard @@ -929,31 +929,31 @@ __metadata: languageName: unknown linkType: soft -"@angular/router@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/router@npm:19.0.0-next.3" +"@angular/router@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/router@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 - "@angular/platform-browser": 19.0.0-next.3 + "@angular/common": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 + "@angular/platform-browser": 19.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/3c3b263260249b473c3b602beed67dc94748c666ebb461ea0c17910e5ebc4ba504317782967447fdf20159edcaeb9489c49f6b5a8e8a74fc97d96ac710db4995 + checksum: 10c0/ef90209c57e0f5cd56911f920597fb4e7645ca415fb1709b312e7deee242ac86fda15ae5ab53353bc05f46a56dd813a66274aae3e90d1c60f3502b20332835e3 languageName: node linkType: hard -"@angular/service-worker@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/service-worker@npm:19.0.0-next.3" +"@angular/service-worker@npm:19.0.0-next.5": + version: 19.0.0-next.5 + resolution: "@angular/service-worker@npm:19.0.0-next.5" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.3 - "@angular/core": 19.0.0-next.3 + "@angular/common": 19.0.0-next.5 + "@angular/core": 19.0.0-next.5 bin: ngsw-config: ngsw-config.js - checksum: 10c0/67d61ec15e94b908e9a7e71720a65aca71e6601abe39671f62a52566fa2d43a9a4fe5d152e9b33fdd005601f3787624a3b7b8690220b1d6ce8d84806ff765975 + checksum: 10c0/10bd0f979259a678becbd726254ca280881bb031ed3e265ca3969effdf27f9a2f390fa7109b969a6f4487998fc93f36cc3a7981ca8a9e00524bd473b63f4905c languageName: node linkType: hard @@ -961,12 +961,12 @@ __metadata: version: 0.0.0-use.local resolution: "@angular/ssr@workspace:packages/angular/ssr" dependencies: - "@angular/common": "npm:19.0.0-next.3" - "@angular/compiler": "npm:19.0.0-next.3" - "@angular/core": "npm:19.0.0-next.3" - "@angular/platform-browser": "npm:19.0.0-next.3" - "@angular/platform-server": "npm:19.0.0-next.3" - "@angular/router": "npm:19.0.0-next.3" + "@angular/common": "npm:19.0.0-next.5" + "@angular/compiler": "npm:19.0.0-next.5" + "@angular/core": "npm:19.0.0-next.5" + "@angular/platform-browser": "npm:19.0.0-next.5" + "@angular/platform-server": "npm:19.0.0-next.5" + "@angular/router": "npm:19.0.0-next.5" "@bazel/runfiles": "npm:^5.8.1" tslib: "npm:^2.3.0" peerDependencies: @@ -3315,7 +3315,41 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor@npm:7.47.7, @microsoft/api-extractor@npm:^7.24.2": +"@microsoft/api-extractor-model@npm:7.29.7": + version: 7.29.7 + resolution: "@microsoft/api-extractor-model@npm:7.29.7" + dependencies: + "@microsoft/tsdoc": "npm:~0.15.0" + "@microsoft/tsdoc-config": "npm:~0.17.0" + "@rushstack/node-core-library": "npm:5.8.0" + checksum: 10c0/3ea542dbda0b18854db5570e6160730269c4a03662a73a48402fdd70d7510f56afeb344efa6727137320ed10ac06603ae4985b3ba6cb229984acee9cd132842a + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:7.47.8": + version: 7.47.8 + resolution: "@microsoft/api-extractor@npm:7.47.8" + dependencies: + "@microsoft/api-extractor-model": "npm:7.29.7" + "@microsoft/tsdoc": "npm:~0.15.0" + "@microsoft/tsdoc-config": "npm:~0.17.0" + "@rushstack/node-core-library": "npm:5.8.0" + "@rushstack/rig-package": "npm:0.5.3" + "@rushstack/terminal": "npm:0.14.1" + "@rushstack/ts-command-line": "npm:4.22.7" + lodash: "npm:~4.17.15" + minimatch: "npm:~3.0.3" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + source-map: "npm:~0.6.1" + typescript: "npm:5.4.2" + bin: + api-extractor: bin/api-extractor + checksum: 10c0/e64bb9583f7109fbd39291544ccc685fc805121a15e08089dae75bf3bccc4a9744a153ec77c0dee61fe0d3a082ffa0cabf2c96761968ddb78018f94d4e01616b + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:^7.24.2": version: 7.47.7 resolution: "@microsoft/api-extractor@npm:7.47.7" dependencies: @@ -3404,8 +3438,8 @@ __metadata: resolution: "@ngtools/webpack@workspace:packages/ngtools/webpack" dependencies: "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" - "@angular/compiler": "npm:19.0.0-next.3" - "@angular/compiler-cli": "npm:19.0.0-next.3" + "@angular/compiler": "npm:19.0.0-next.5" + "@angular/compiler-cli": "npm:19.0.0-next.5" typescript: "npm:5.6.2" webpack: "npm:5.94.0" peerDependencies: @@ -4120,6 +4154,27 @@ __metadata: languageName: node linkType: hard +"@rushstack/node-core-library@npm:5.8.0": + version: 5.8.0 + resolution: "@rushstack/node-core-library@npm:5.8.0" + dependencies: + ajv: "npm:~8.13.0" + ajv-draft-04: "npm:~1.0.0" + ajv-formats: "npm:~3.0.1" + fs-extra: "npm:~7.0.1" + import-lazy: "npm:~4.0.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/a8b8e5c04ec160a8036435d70441c9caa2698af80f0f39b14e927e29a6bb67d682a892bc74e8133f7bf5821ed482b3139209acd650103bea078f7f69c5a8994a + languageName: node + linkType: hard + "@rushstack/rig-package@npm:0.5.3": version: 0.5.3 resolution: "@rushstack/rig-package@npm:0.5.3" @@ -4145,6 +4200,21 @@ __metadata: languageName: node linkType: hard +"@rushstack/terminal@npm:0.14.1": + version: 0.14.1 + resolution: "@rushstack/terminal@npm:0.14.1" + dependencies: + "@rushstack/node-core-library": "npm:5.8.0" + supports-color: "npm:~8.1.1" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/7cd86c3d9e826101951ec8553a95cd654acf79e7bc66095717cc3cb2e5508194aecec68a12bfa4616b08db6ea5e2102fde6321b1a6d3bd95dd9457156feadd78 + languageName: node + linkType: hard + "@rushstack/ts-command-line@npm:4.22.6": version: 4.22.6 resolution: "@rushstack/ts-command-line@npm:4.22.6" @@ -4157,6 +4227,18 @@ __metadata: languageName: node linkType: hard +"@rushstack/ts-command-line@npm:4.22.7": + version: 4.22.7 + resolution: "@rushstack/ts-command-line@npm:4.22.7" + dependencies: + "@rushstack/terminal": "npm:0.14.1" + "@types/argparse": "npm:1.0.38" + argparse: "npm:~1.0.9" + string-argv: "npm:~0.3.1" + checksum: 10c0/6142db8ccf2f40ab87f763751726ae517b9a89eee6b3889f70f059ea2dd55d0d1892f899860099cf7777b2253f55c9652d4a9e9d0c82028b5fa13bce1b10de4c + languageName: node + linkType: hard + "@schematics/angular@npm:0.0.0-PLACEHOLDER, @schematics/angular@workspace:packages/schematics/angular": version: 0.0.0-use.local resolution: "@schematics/angular@workspace:packages/schematics/angular" @@ -15476,7 +15558,7 @@ __metadata: languageName: node linkType: hard -"send@npm:0.18.0, send@npm:^0.18.0": +"send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" dependencies: @@ -15497,7 +15579,7 @@ __metadata: languageName: node linkType: hard -"send@npm:0.19.0": +"send@npm:0.19.0, send@npm:^0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" dependencies: @@ -16931,16 +17013,6 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.5.4": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/422be60f89e661eab29ac488c974b6cc0a660fb2228003b297c3d10c32c90f3bcffc1009b43876a082515a3c376b1eefcce823d6e78982e6878408b9a923199c - languageName: node - linkType: hard - "typescript@npm:5.6.2": version: 5.6.2 resolution: "typescript@npm:5.6.2" @@ -16971,16 +17043,6 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.5.4#optional!builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/73409d7b9196a5a1217b3aaad929bf76294d3ce7d6e9766dd880ece296ee91cf7d7db6b16c6c6c630ee5096eccde726c0ef17c7dfa52b01a243e57ae1f09ef07 - languageName: node - linkType: hard - "typescript@patch:typescript@npm%3A5.6.2#optional!builtin": version: 5.6.2 resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=74658d" From 5bba61db2423c97460f901eeef50335ac3824694 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 12 Sep 2024 07:21:03 +0000 Subject: [PATCH 24/53] build: update all non-major dependencies --- package.json | 8 +- packages/angular/build/package.json | 4 +- .../angular_devkit/build_angular/package.json | 2 +- yarn.lock | 281 ++++++++++++++++-- 4 files changed, 264 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 9a25c846b3d0..f4a1531f73ed 100644 --- a/package.json +++ b/package.json @@ -138,12 +138,12 @@ "eslint-config-prettier": "9.1.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.30.0", - "express": "4.20.0", + "express": "4.21.0", "fast-glob": "3.3.2", "http-proxy": "^1.18.1", "http-proxy-middleware": "3.0.2", "https-proxy-agent": "7.0.5", - "husky": "9.1.5", + "husky": "9.1.6", "ini": "5.0.0", "istanbul-lib-instrument": "6.0.3", "jasmine": "^5.0.0", @@ -183,7 +183,7 @@ "puppeteer": "18.2.1", "quicktype-core": "23.0.170", "resolve-url-loader": "5.0.0", - "rollup": "4.21.2", + "rollup": "4.21.3", "rollup-plugin-sourcemaps": "^0.6.0", "rxjs": "7.8.1", "sass": "1.78.0", @@ -204,7 +204,7 @@ "unenv": "^1.10.0", "verdaccio": "5.32.1", "verdaccio-auth-memory": "^10.0.0", - "vite": "5.4.3", + "vite": "5.4.4", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index a2e7d6e527dc..30fde64c04eb 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -38,10 +38,10 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "rollup": "4.21.2", + "rollup": "4.21.3", "sass": "1.78.0", "semver": "7.6.3", - "vite": "5.4.3", + "vite": "5.4.4", "watchpack": "2.4.2" }, "peerDependencies": { diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index d3cd2ddb9032..cb462eedacab 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -61,7 +61,7 @@ "terser": "5.32.0", "tree-kill": "1.2.2", "tslib": "2.7.0", - "vite": "5.4.3", + "vite": "5.4.4", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/yarn.lock b/yarn.lock index dd7e796e8b3e..790005c279fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -116,7 +116,7 @@ __metadata: tree-kill: "npm:1.2.2" tslib: "npm:2.7.0" undici: "npm:6.19.8" - vite: "npm:5.4.3" + vite: "npm:5.4.4" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -401,10 +401,10 @@ __metadata: parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" piscina: "npm:4.6.1" - rollup: "npm:4.21.2" + rollup: "npm:4.21.3" sass: "npm:1.78.0" semver: "npm:7.6.3" - vite: "npm:5.4.3" + vite: "npm:5.4.4" watchpack: "npm:2.4.2" peerDependencies: "@angular/compiler-cli": ^19.0.0-next.0 @@ -714,12 +714,12 @@ __metadata: eslint-config-prettier: "npm:9.1.0" eslint-plugin-header: "npm:3.1.1" eslint-plugin-import: "npm:2.30.0" - express: "npm:4.20.0" + express: "npm:4.21.0" fast-glob: "npm:3.3.2" http-proxy: "npm:^1.18.1" http-proxy-middleware: "npm:3.0.2" https-proxy-agent: "npm:7.0.5" - husky: "npm:9.1.5" + husky: "npm:9.1.6" ini: "npm:5.0.0" istanbul-lib-instrument: "npm:6.0.3" jasmine: "npm:^5.0.0" @@ -759,7 +759,7 @@ __metadata: puppeteer: "npm:18.2.1" quicktype-core: "npm:23.0.170" resolve-url-loader: "npm:5.0.0" - rollup: "npm:4.21.2" + rollup: "npm:4.21.3" rollup-plugin-sourcemaps: "npm:^0.6.0" rxjs: "npm:7.8.1" sass: "npm:1.78.0" @@ -780,7 +780,7 @@ __metadata: unenv: "npm:^1.10.0" verdaccio: "npm:5.32.1" verdaccio-auth-memory: "npm:^10.0.0" - vite: "npm:5.4.3" + vite: "npm:5.4.4" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -4006,6 +4006,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-android-arm64@npm:4.21.2" @@ -4013,6 +4020,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-android-arm64@npm:4.21.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" @@ -4020,6 +4034,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.21.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" @@ -4027,6 +4048,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.21.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" @@ -4034,6 +4062,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" @@ -4041,6 +4076,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.3" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" @@ -4048,6 +4090,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" @@ -4055,6 +4104,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" @@ -4062,6 +4118,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" @@ -4069,6 +4132,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.3" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" @@ -4076,6 +4146,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" @@ -4083,6 +4160,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" @@ -4090,6 +4174,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" @@ -4097,6 +4188,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" @@ -4104,6 +4202,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.21.2": version: 4.21.2 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" @@ -4111,6 +4216,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.21.3": + version: 4.21.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rollup/wasm-node@npm:^4.18.0": version: 4.21.2 resolution: "@rollup/wasm-node@npm:4.21.2" @@ -9329,9 +9441,9 @@ __metadata: languageName: node linkType: hard -"express@npm:4.20.0": - version: 4.20.0 - resolution: "express@npm:4.20.0" +"express@npm:4.21.0": + version: 4.21.0 + resolution: "express@npm:4.21.0" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" @@ -9345,7 +9457,7 @@ __metadata: encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" + finalhandler: "npm:1.3.1" fresh: "npm:0.5.2" http-errors: "npm:2.0.0" merge-descriptors: "npm:1.0.3" @@ -9354,17 +9466,17 @@ __metadata: parseurl: "npm:~1.3.3" path-to-regexp: "npm:0.1.10" proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" + qs: "npm:6.13.0" range-parser: "npm:~1.2.1" safe-buffer: "npm:5.2.1" send: "npm:0.19.0" - serve-static: "npm:1.16.0" + serve-static: "npm:1.16.2" setprototypeof: "npm:1.2.0" statuses: "npm:2.0.1" type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/626e440e9feffa3f82ebce5e7dc0ad7a74fa96079994f30048cce450f4855a258abbcabf021f691aeb72154867f0d28440a8498c62888805faf667a829fb65aa + checksum: 10c0/4cf7ca328f3fdeb720f30ccb2ea7708bfa7d345f9cc460b64a82bf1b2c91e5b5852ba15a9a11b2a165d6089acf83457fc477dc904d59cd71ed34c7a91762c6cc languageName: node linkType: hard @@ -9586,6 +9698,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 10c0/d38035831865a49b5610206a3a9a9aae4e8523cbbcd01175d0480ffbf1278c47f11d89be3ca7f617ae6d94f29cf797546a4619cd84dd109009ef33f12f69019f + languageName: node + linkType: hard + "find-cache-dir@npm:^3.3.2": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" @@ -10510,12 +10637,12 @@ __metadata: languageName: node linkType: hard -"husky@npm:9.1.5": - version: 9.1.5 - resolution: "husky@npm:9.1.5" +"husky@npm:9.1.6": + version: 9.1.6 + resolution: "husky@npm:9.1.6" bin: husky: bin.js - checksum: 10c0/f42efb95a026303eb880898760f802d88409780dd72f17781d2dfc302177d4f80b641cf1f1694f53f6d97c536c7397684133d8c8fe4a4426f7460186a7d1c6b8 + checksum: 10c0/705673db4a247c1febd9c5df5f6a3519106cf0335845027bb50a15fba9b1f542cb2610932ede96fd08008f6d9f49db0f15560509861808b0031cdc0e7c798bac languageName: node linkType: hard @@ -15288,6 +15415,69 @@ __metadata: languageName: node linkType: hard +"rollup@npm:4.21.3": + version: 4.21.3 + resolution: "rollup@npm:4.21.3" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.21.3" + "@rollup/rollup-android-arm64": "npm:4.21.3" + "@rollup/rollup-darwin-arm64": "npm:4.21.3" + "@rollup/rollup-darwin-x64": "npm:4.21.3" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.3" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.3" + "@rollup/rollup-linux-arm64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-arm64-musl": "npm:4.21.3" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.3" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-s390x-gnu": "npm:4.21.3" + "@rollup/rollup-linux-x64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-x64-musl": "npm:4.21.3" + "@rollup/rollup-win32-arm64-msvc": "npm:4.21.3" + "@rollup/rollup-win32-ia32-msvc": "npm:4.21.3" + "@rollup/rollup-win32-x64-msvc": "npm:4.21.3" + "@types/estree": "npm:1.0.5" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a9f98366a451f1302276390de9c0c59b464d680946410f53c14e7057fa84642efbe05eca8d85076962657955d77bb4a2d2b6dd8b70baf58c3c4b56f565d804dd + languageName: node + linkType: hard + "run-applescript@npm:^7.0.0": version: 7.0.0 resolution: "run-applescript@npm:7.0.0" @@ -15648,15 +15838,15 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.16.0": - version: 1.16.0 - resolution: "serve-static@npm:1.16.0" +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" dependencies: - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" parseurl: "npm:~1.3.3" - send: "npm:0.18.0" - checksum: 10c0/d7a5beca08cc55f92998d8b87c111dd842d642404231c90c11f504f9650935da4599c13256747b0a988442a59851343271fe8e1946e03e92cd79c447b5f3ae01 + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f languageName: node linkType: hard @@ -17562,6 +17752,49 @@ __metadata: languageName: node linkType: hard +"vite@npm:5.4.4": + version: 5.4.4 + resolution: "vite@npm:5.4.4" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/2752e7dd5584ea7cc057742e8f5cbf2f2bd3a2bceb8794fbd3d52f1e88d362b5ac7f1c70be7a3d01b3d768320c8a8ad0df287fd72f253bf040423c36c67a3e89 + languageName: node + linkType: hard + "void-elements@npm:^2.0.0": version: 2.0.1 resolution: "void-elements@npm:2.0.1" From 434979afc39dc301a50715bb167ccb0b3931a4d7 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 12 Aug 2024 13:34:58 -0400 Subject: [PATCH 25/53] refactor(@angular/build): support dev server direct component style serving The Vite-based development server now provides support for serving individual component stylesheets both with and without emulated view encapsulation. This capability is not yet used by the Angular runtime code. The ability to use external stylesheets instead of bundling the style content is an enabling capability primarily for automatic component style HMR features. Additionally, it has potential future benefits for development mode deferred style processing which may reduce the initial build time when using the development server. The application build itself also does not yet generate external stylesheets. --- packages/angular/build/BUILD.bazel | 1 + packages/angular/build/package.json | 1 + .../src/builders/dev-server/vite-server.ts | 31 ++++++++++++- .../src/tools/vite/angular-memory-plugin.ts | 6 ++- .../vite/middlewares/assets-middleware.ts | 44 ++++++++++++++++++- yarn.lock | 1 + 6 files changed, 80 insertions(+), 4 deletions(-) diff --git a/packages/angular/build/BUILD.bazel b/packages/angular/build/BUILD.bazel index b60ab7d83299..9ff12a1b770a 100644 --- a/packages/angular/build/BUILD.bazel +++ b/packages/angular/build/BUILD.bazel @@ -59,6 +59,7 @@ ts_library( "//packages/angular_devkit/architect", "@npm//@ampproject/remapping", "@npm//@angular/common", + "@npm//@angular/compiler", "@npm//@angular/compiler-cli", "@npm//@angular/core", "@npm//@angular/localize", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 30fde64c04eb..30faea5c5a4d 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -45,6 +45,7 @@ "watchpack": "2.4.2" }, "peerDependencies": { + "@angular/compiler": "^19.0.0-next.0", "@angular/compiler-cli": "^19.0.0-next.0", "@angular/localize": "^19.0.0-next.0", "@angular/platform-server": "^19.0.0-next.0", diff --git a/packages/angular/build/src/builders/dev-server/vite-server.ts b/packages/angular/build/src/builders/dev-server/vite-server.ts index cd9a07e81fc8..aa6a9cf84e86 100644 --- a/packages/angular/build/src/builders/dev-server/vite-server.ts +++ b/packages/angular/build/src/builders/dev-server/vite-server.ts @@ -151,6 +151,7 @@ export async function* serveWithVite( explicitBrowser: [], explicitServer: [], }; + const usedComponentStyles = new Map(); // Add cleanup logic via a builder teardown. let deferred: () => void; @@ -271,7 +272,14 @@ export async function* serveWithVite( // This is a workaround for: https://github.com/vitejs/vite/issues/14896 await server.restart(); } else { - await handleUpdate(normalizePath, generatedFiles, server, serverOptions, context.logger); + await handleUpdate( + normalizePath, + generatedFiles, + server, + serverOptions, + context.logger, + usedComponentStyles, + ); } } else { const projectName = context.target?.project; @@ -311,6 +319,7 @@ export async function* serveWithVite( prebundleTransformer, target, isZonelessApp(polyfills), + usedComponentStyles, browserOptions.loader as EsbuildLoaderOption | undefined, extensions?.middleware, transformers?.indexHtml, @@ -368,6 +377,7 @@ async function handleUpdate( server: ViteDevServer, serverOptions: NormalizedDevServerOptions, logger: BuilderContext['logger'], + usedComponentStyles: Map, ): Promise { const updatedFiles: string[] = []; let isServerFileUpdated = false; @@ -403,7 +413,22 @@ async function handleUpdate( const timestamp = Date.now(); server.hot.send({ type: 'update', - updates: updatedFiles.map((filePath) => { + updates: updatedFiles.flatMap((filePath) => { + // For component styles, an HMR update must be sent for each one with the corresponding + // component identifier search parameter (`ngcomp`). The Vite client code will not keep + // the existing search parameters when it performs an update and each one must be + // specified explicitly. Typically, there is only one each though as specific style files + // are not typically reused across components. + const componentIds = usedComponentStyles.get(filePath); + if (componentIds) { + return componentIds.map((id) => ({ + type: 'css-update', + timestamp, + path: `${filePath}?ngcomp` + (id ? `=${id}` : ''), + acceptedPath: filePath, + })); + } + return { type: 'css-update', timestamp, @@ -508,6 +533,7 @@ export async function setupServer( prebundleTransformer: JavaScriptTransformer, target: string[], zoneless: boolean, + usedComponentStyles: Map, prebundleLoaderExtensions: EsbuildLoaderOption | undefined, extensionMiddleware?: Connect.NextHandleFunction[], indexHtmlTransformer?: (content: string) => Promise, @@ -616,6 +642,7 @@ export async function setupServer( indexHtmlTransformer, extensionMiddleware, normalizePath, + usedComponentStyles, }), createRemoveIdPrefixPlugin(externalMetadata.explicitBrowser), ], diff --git a/packages/angular/build/src/tools/vite/angular-memory-plugin.ts b/packages/angular/build/src/tools/vite/angular-memory-plugin.ts index d53410918b9c..4a39ba50417d 100644 --- a/packages/angular/build/src/tools/vite/angular-memory-plugin.ts +++ b/packages/angular/build/src/tools/vite/angular-memory-plugin.ts @@ -29,6 +29,7 @@ export interface AngularMemoryPluginOptions { extensionMiddleware?: Connect.NextHandleFunction[]; indexHtmlTransformer?: (content: string) => Promise; normalizePath: (path: string) => string; + usedComponentStyles: Map; } export function createAngularMemoryPlugin(options: AngularMemoryPluginOptions): Plugin { @@ -42,6 +43,7 @@ export function createAngularMemoryPlugin(options: AngularMemoryPluginOptions): extensionMiddleware, indexHtmlTransformer, normalizePath, + usedComponentStyles, } = options; return { @@ -113,7 +115,9 @@ export function createAngularMemoryPlugin(options: AngularMemoryPluginOptions): }; // Assets and resources get handled first - server.middlewares.use(createAngularAssetsMiddleware(server, assets, outputFiles)); + server.middlewares.use( + createAngularAssetsMiddleware(server, assets, outputFiles, usedComponentStyles), + ); if (extensionMiddleware?.length) { extensionMiddleware.forEach((middleware) => server.middlewares.use(middleware)); diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index 9dd93e1df516..8c2647949165 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -9,16 +9,20 @@ import { lookup as lookupMimeType } from 'mrmime'; import { extname } from 'node:path'; import type { Connect, ViteDevServer } from 'vite'; +import { loadEsmModule } from '../../../utils/load-esm'; import { AngularMemoryOutputFiles, appendServerConfiguredHeaders, pathnameWithoutBasePath, } from '../utils'; +const COMPONENT_REGEX = /%COMP%/g; + export function createAngularAssetsMiddleware( server: ViteDevServer, assets: Map, outputFiles: AngularMemoryOutputFiles, + usedComponentStyles: Map, ): Connect.NextHandleFunction { return function (req, res, next) { if (req.url === undefined || res.writableEnded) { @@ -69,13 +73,51 @@ export function createAngularAssetsMiddleware( if (extension !== '.js' && extension !== '.html') { const outputFile = outputFiles.get(pathname); if (outputFile?.servable) { + const data = outputFile.contents; + if (extension === '.css') { + // Inject component ID for view encapsulation if requested + const componentId = new URL(req.url, 'http://localhost').searchParams.get('ngcomp'); + if (componentId !== null) { + // Record the component style usage for HMR updates + const usedIds = usedComponentStyles.get(pathname); + if (usedIds === undefined) { + usedComponentStyles.set(pathname, [componentId]); + } else { + usedIds.push(componentId); + } + // Shim the stylesheet if a component ID is provided + if (componentId.length > 0) { + // Validate component ID + if (/[_.-A-Za-z0-9]+-c\d{9}$/.test(componentId)) { + loadEsmModule('@angular/compiler') + .then((compilerModule) => { + const encapsulatedData = compilerModule + .encapsulateStyle(new TextDecoder().decode(data)) + .replaceAll(COMPONENT_REGEX, componentId); + + res.setHeader('Content-Type', 'text/css'); + res.setHeader('Cache-Control', 'no-cache'); + appendServerConfiguredHeaders(server, res); + res.end(encapsulatedData); + }) + .catch((e) => next(e)); + + return; + } else { + // eslint-disable-next-line no-console + console.error('Invalid component stylesheet ID request: ' + componentId); + } + } + } + } + const mimeType = lookupMimeType(extension); if (mimeType) { res.setHeader('Content-Type', mimeType); } res.setHeader('Cache-Control', 'no-cache'); appendServerConfiguredHeaders(server, res); - res.end(outputFile.contents); + res.end(data); return; } diff --git a/yarn.lock b/yarn.lock index 790005c279fd..0a4486b6ad5c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -407,6 +407,7 @@ __metadata: vite: "npm:5.4.4" watchpack: "npm:2.4.2" peerDependencies: + "@angular/compiler": ^19.0.0-next.0 "@angular/compiler-cli": ^19.0.0-next.0 "@angular/localize": ^19.0.0-next.0 "@angular/platform-server": ^19.0.0-next.0 From 929d4835afd646409b92fe3a7452678e1e5bd12a Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 11:17:00 +0000 Subject: [PATCH 26/53] refactor(@angular/cli): remove unused imports Remove unused imports from command-module file. --- packages/angular/cli/src/command-builder/command-module.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index 41785b833935..59987ed34679 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -6,17 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ -import { logging, schema, strings } from '@angular-devkit/core'; +import { logging, schema } from '@angular-devkit/core'; import { readFileSync } from 'fs'; import * as path from 'path'; import yargs, { - Arguments, ArgumentsCamelCase, Argv, CamelCaseKey, - PositionalOptions, CommandModule as YargsCommandModule, - Options as YargsOptions, } from 'yargs'; import { Parser as yargsParser } from 'yargs/helpers'; import { getAnalyticsUserId } from '../analytics/analytics'; From 056d17aa09c0ccedfea1ff109afa869dc3bcee5a Mon Sep 17 00:00:00 2001 From: JoostK Date: Thu, 12 Sep 2024 14:22:14 +0200 Subject: [PATCH 27/53] refactor(@angular/ssr): use `ReadonlyMap` instead of `Readonly` mapped type The `Readonly` mapped type only introduces the `readonly` modifier for each property, but `Map` has mutating methods like `clear`, `delete` and `set` that would still remain usable. This commit switches those usages over to the `ReadonlyMap` type which doesn't have any of the mutating methods. --- goldens/public-api/angular/ssr/index.api.md | 2 +- goldens/public-api/angular/ssr/node/index.api.md | 2 +- packages/angular/ssr/node/src/app-engine.ts | 2 +- packages/angular/ssr/src/app-engine.ts | 2 +- packages/angular/ssr/src/manifest.ts | 9 +++++---- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index 282aad7f3b41..0818d7811bc1 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -6,7 +6,7 @@ // @public export class AngularAppEngine { - getHeaders(request: Request): Readonly>; + getHeaders(request: Request): ReadonlyMap; render(request: Request, requestContext?: unknown): Promise; static ɵhooks: Hooks; } diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 32820b80f211..8dbd8b9e0284 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -12,7 +12,7 @@ import { Type } from '@angular/core'; // @public export class AngularNodeAppEngine { - getHeaders(request: IncomingMessage): Readonly>; + getHeaders(request: IncomingMessage): ReadonlyMap; render(request: IncomingMessage, requestContext?: unknown): Promise; } diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index c6564e05fd1e..bbcd30f70e2b 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -66,7 +66,7 @@ export class AngularNodeAppEngine { })); * ``` */ - getHeaders(request: IncomingMessage): Readonly> { + getHeaders(request: IncomingMessage): ReadonlyMap { return this.angularAppEngine.getHeaders(createWebRequestFromNodeRequest(request)); } } diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 2dba398a8fd1..96933fd8d41c 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -110,7 +110,7 @@ export class AngularAppEngine { * @returns A `Map` containing the HTTP headers as key-value pairs. * @note This function should be used exclusively for retrieving headers of SSG pages. */ - getHeaders(request: Request): Readonly> { + getHeaders(request: Request): ReadonlyMap { if (this.manifest.staticPathsHeaders.size === 0) { return new Map(); } diff --git a/packages/angular/ssr/src/manifest.ts b/packages/angular/ssr/src/manifest.ts index 4e29d8f76b8d..b9e371171e23 100644 --- a/packages/angular/ssr/src/manifest.ts +++ b/packages/angular/ssr/src/manifest.ts @@ -36,7 +36,7 @@ export interface AngularAppEngineManifest { * - `key`: The base href for the entry point. * - `value`: A function that returns a promise resolving to an object of type `EntryPointExports`. */ - readonly entryPoints: Readonly Promise>>; + readonly entryPoints: ReadonlyMap Promise>; /** * The base path for the server application. @@ -52,8 +52,9 @@ export interface AngularAppEngineManifest { * - `headerName`: The name of the HTTP header. * - `headerValue`: The value of the HTTP header. */ - readonly staticPathsHeaders: Readonly< - Map + readonly staticPathsHeaders: ReadonlyMap< + string, + readonly [headerName: string, headerValue: string][] >; } @@ -67,7 +68,7 @@ export interface AngularAppManifest { * - `key`: The path of the asset. * - `value`: A function returning a promise that resolves to the file contents of the asset. */ - readonly assets: Readonly Promise>>; + readonly assets: ReadonlyMap Promise>; /** * The bootstrap mechanism for the server application. From 85df4011ba27254ddb7f22dae550272c9c4406dd Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 14:55:28 +0000 Subject: [PATCH 28/53] fix(@angular/ssr): resolve `bootstrap is not a function` error In cases where the application is not zoneless and async/await is downleveled, an issue occurred where `await` was not being downleveled correctly. This led to the `bootstrap is not a function` error. See: https://github.com/angular/angular/actions/runs/10817795242/job/30014914340?pr=57776 --- packages/angular/ssr/src/routes/ng-routes.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index aba6ff30fa65..01fc831deed0 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -276,11 +276,8 @@ export async function extractRoutesAndCreateRouteTree( ): Promise { const routeTree = new RouteTree(); const document = await new ServerAssets(manifest).getIndexServerHtml(); - const { baseHref, routes } = await getRoutesFromAngularRouterConfig( - await manifest.bootstrap(), - document, - url, - ); + const bootstrap = await manifest.bootstrap(); + const { baseHref, routes } = await getRoutesFromAngularRouterConfig(bootstrap, document, url); for (let { route, redirectTo } of routes) { route = joinUrlParts(baseHref, route); From 793f6a0964e0f0bd04107310b5b1e69c4fd40624 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 15:10:31 +0000 Subject: [PATCH 29/53] release: cut the v19.0.0-next.5 release --- CHANGELOG.md | 18 ++++++++++++++++++ package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c182dd269e0f..f1ea08a037d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + + +# 19.0.0-next.5 (2024-09-12) + +### @angular-devkit/architect + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------- | +| [78f76485f](https://github.com/angular/angular-cli/commit/78f76485fe315ffd0262c1a3732092731235828b) | feat | merge object options from CLI | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------- | +| [85df4011b](https://github.com/angular/angular-cli/commit/85df4011ba27254ddb7f22dae550272c9c4406dd) | fix | resolve `bootstrap is not a function` error | + + + # 19.0.0-next.4 (2024-09-11) diff --git a/package.json b/package.json index f4a1531f73ed..fdeb04a84fbb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "19.0.0-next.4", + "version": "19.0.0-next.5", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From d66aaa3ca458e05b535bec7c1dcb98b0e9c5202e Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 17:43:40 +0000 Subject: [PATCH 30/53] feat(@angular/ssr): add server routing configuration API This commit introduces a new server routing configuration API, as discussed in RFC https://github.com/angular/angular/discussions/56785. The new API provides several enhancements: ```ts const serverRoutes: ServerRoute[] = [ { path: '/error', renderMode: RenderMode.Server, status: 404, headers: { 'Cache-Control': 'no-cache' } } ]; ``` ```ts const serverRoutes: ServerRoute[] = [ { path: '/product/:id', renderMode: RenderMode.Prerender, async getPrerenderPaths() { const dataService = inject(ProductService); const ids = await dataService.getIds(); // Assuming this returns ['1', '2', '3'] return ids.map(id => ({ id })); // Generates paths like: [{ id: '1' }, { id: '2' }, { id: '3' }] } } ]; ``` ```ts const serverRoutes: ServerRoute[] = [ { path: '/product/:id', renderMode: RenderMode.Prerender, fallback: PrerenderFallback.Server, // Can be Server, Client, or None async getPrerenderPaths() { } } ]; ``` ```ts const serverRoutes: ServerRoute[] = [ { path: '/product/:id', renderMode: RenderMode.Server, }, { path: '/error', renderMode: RenderMode.Client, }, { path: '/**', renderMode: RenderMode.Prerender, }, ]; ``` These additions aim to provide greater flexibility and control over server-side rendering configurations and prerendering behaviors. --- goldens/public-api/angular/ssr/index.api.md | 25 +- .../angular/ssr/index_transitive.api.md | 43 +++ .../public-api/angular/ssr/node/index.api.md | 2 +- .../tests/options/app-shell_spec.ts | 3 +- .../tools/esbuild/application-code-bundle.ts | 1 - .../server-rendering/load-esm-from-memory.ts | 7 +- .../src/utils/server-rendering/prerender.ts | 5 +- .../utils/server-rendering/render-worker.ts | 18 +- .../routes-extractor-worker.ts | 2 + packages/angular/ssr/BUILD.bazel | 12 +- packages/angular/ssr/node/src/app-engine.ts | 6 +- packages/angular/ssr/private_export.ts | 1 - packages/angular/ssr/public_api.ts | 7 + packages/angular/ssr/public_api_transitive.ts | 20 ++ packages/angular/ssr/src/app-engine.ts | 2 +- packages/angular/ssr/src/app.ts | 105 ++++--- packages/angular/ssr/src/routes/ng-routes.ts | 277 ++++++++++++++---- .../angular/ssr/src/routes/route-config.ts | 77 +++-- packages/angular/ssr/src/routes/route-tree.ts | 46 ++- packages/angular/ssr/src/utils/ng.ts | 31 +- packages/angular/ssr/test/BUILD.bazel | 1 + packages/angular/ssr/test/app-engine_spec.ts | 21 +- packages/angular/ssr/test/app_spec.ts | 94 ++++-- .../angular/ssr/test/routes/ng-routes_spec.ts | 176 +++++++++++ .../angular/ssr/test/routes/router_spec.ts | 69 ++++- packages/angular/ssr/test/testing-utils.ts | 39 ++- .../src/builders/app-shell/app-shell_spec.ts | 3 +- 27 files changed, 868 insertions(+), 225 deletions(-) create mode 100644 goldens/public-api/angular/ssr/index_transitive.api.md create mode 100644 packages/angular/ssr/public_api_transitive.ts create mode 100644 packages/angular/ssr/test/routes/ng-routes_spec.ts diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index 0818d7811bc1..3c9501138fb5 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -4,13 +4,36 @@ ```ts +import { EnvironmentProviders } from '@angular/core'; + // @public export class AngularAppEngine { - getHeaders(request: Request): ReadonlyMap; + getPrerenderHeaders(request: Request): ReadonlyMap; render(request: Request, requestContext?: unknown): Promise; static ɵhooks: Hooks; } +// @public +export enum PrerenderFallback { + Client = 1, + None = 2, + Server = 0 +} + +// @public +export function provideServerRoutesConfig(routes: ServerRoute[]): EnvironmentProviders; + +// @public +export enum RenderMode { + AppShell = 0, + Client = 2, + Prerender = 3, + Server = 1 +} + +// @public +export type ServerRoute = ServerRouteAppShell | ServerRouteClient | ServerRoutePrerender | ServerRoutePrerenderWithParams | ServerRouteServer; + // (No @packageDocumentation comment for this package) ``` diff --git a/goldens/public-api/angular/ssr/index_transitive.api.md b/goldens/public-api/angular/ssr/index_transitive.api.md new file mode 100644 index 000000000000..f51756a2d9cb --- /dev/null +++ b/goldens/public-api/angular/ssr/index_transitive.api.md @@ -0,0 +1,43 @@ +## API Report File for "@angular/devkit-repo" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +// @public +export interface ServerRouteAppShell extends Omit { + renderMode: RenderMode.AppShell; +} + +// @public +export interface ServerRouteClient extends ServerRouteCommon { + renderMode: RenderMode.Client; +} + +// @public +export interface ServerRouteCommon { + headers?: Record; + path: string; + status?: number; +} + +// @public +export interface ServerRoutePrerender extends Omit { + fallback?: never; + renderMode: RenderMode.Prerender; +} + +// @public +export interface ServerRoutePrerenderWithParams extends Omit { + fallback?: PrerenderFallback; + getPrerenderParams: () => Promise[]>; +} + +// @public +export interface ServerRouteServer extends ServerRouteCommon { + renderMode: RenderMode.Server; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 8dbd8b9e0284..01ced4fbe686 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -12,7 +12,7 @@ import { Type } from '@angular/core'; // @public export class AngularNodeAppEngine { - getHeaders(request: IncomingMessage): ReadonlyMap; + getPrerenderHeaders(request: IncomingMessage): ReadonlyMap; render(request: IncomingMessage, requestContext?: unknown): Promise; } diff --git a/packages/angular/build/src/builders/application/tests/options/app-shell_spec.ts b/packages/angular/build/src/builders/application/tests/options/app-shell_spec.ts index 6824e06dd1f9..4964aacc59ea 100644 --- a/packages/angular/build/src/builders/application/tests/options/app-shell_spec.ts +++ b/packages/angular/build/src/builders/application/tests/options/app-shell_spec.ts @@ -116,7 +116,8 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { harness.expectFile('dist/browser/main.js').toExist(); const indexFileContent = harness.expectFile('dist/browser/index.html').content; indexFileContent.toContain('app-shell works!'); - indexFileContent.toContain('ng-server-context="app-shell"'); + // TODO(alanagius): enable once integration of routes in complete. + // indexFileContent.toContain('ng-server-context="app-shell"'); }); it('critical CSS is inlined', async () => { diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 546f97f2c1fc..fa8fa76f1b40 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -325,7 +325,6 @@ export function createServerMainCodeBundleOptions( // Add @angular/ssr exports `export { - ɵServerRenderContext, ɵdestroyAngularServerApp, ɵextractRoutesAndCreateRouteTree, ɵgetOrCreateAngularServerApp, diff --git a/packages/angular/build/src/utils/server-rendering/load-esm-from-memory.ts b/packages/angular/build/src/utils/server-rendering/load-esm-from-memory.ts index bf4603109463..d9a4f4b35414 100644 --- a/packages/angular/build/src/utils/server-rendering/load-esm-from-memory.ts +++ b/packages/angular/build/src/utils/server-rendering/load-esm-from-memory.ts @@ -7,11 +7,7 @@ */ import type { ApplicationRef, Type } from '@angular/core'; -import type { - ɵServerRenderContext, - ɵextractRoutesAndCreateRouteTree, - ɵgetOrCreateAngularServerApp, -} from '@angular/ssr'; +import type { ɵextractRoutesAndCreateRouteTree, ɵgetOrCreateAngularServerApp } from '@angular/ssr'; import { assertIsError } from '../error'; import { loadEsmModule } from '../load-esm'; @@ -20,7 +16,6 @@ import { loadEsmModule } from '../load-esm'; */ interface MainServerBundleExports { default: (() => Promise) | Type; - ɵServerRenderContext: typeof ɵServerRenderContext; ɵextractRoutesAndCreateRouteTree: typeof ɵextractRoutesAndCreateRouteTree; ɵgetOrCreateAngularServerApp: typeof ɵgetOrCreateAngularServerApp; } diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index 19c6095f783a..f6e1b877b819 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -210,12 +210,13 @@ async function renderPages( route.slice(baseHrefWithLeadingSlash.length - 1), ); - const isAppShellRoute = appShellRoute === routeWithoutBaseHref; - const render: Promise = renderWorker.run({ url: route, isAppShellRoute }); + const render: Promise = renderWorker.run({ url: route }); const renderResult: Promise = render .then((content) => { if (content !== null) { const outPath = posix.join(removeLeadingSlash(routeWithoutBaseHref), 'index.html'); + const isAppShellRoute = appShellRoute === routeWithoutBaseHref; + output[outPath] = { content, appShellRoute: isAppShellRoute }; } }) diff --git a/packages/angular/build/src/utils/server-rendering/render-worker.ts b/packages/angular/build/src/utils/server-rendering/render-worker.ts index c419b65de195..a8af04be4939 100644 --- a/packages/angular/build/src/utils/server-rendering/render-worker.ts +++ b/packages/angular/build/src/utils/server-rendering/render-worker.ts @@ -16,24 +16,18 @@ export interface RenderWorkerData extends ESMInMemoryFileLoaderWorkerData { export interface RenderOptions { url: string; - isAppShellRoute: boolean; } /** * Renders each route in routes and writes them to //index.html. */ -async function renderPage({ url, isAppShellRoute }: RenderOptions): Promise { - const { - ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, - ɵServerRenderContext: ServerRenderContext, - } = await loadEsmModuleFromMemory('./main.server.mjs'); +async function renderPage({ url }: RenderOptions): Promise { + const { ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp } = + await loadEsmModuleFromMemory('./main.server.mjs'); const angularServerApp = getOrCreateAngularServerApp(); - const response = await angularServerApp.render( - new Request(new URL(url, 'http://local-angular-prerender'), { - signal: AbortSignal.timeout(30_000), - }), - undefined, - isAppShellRoute ? ServerRenderContext.AppShell : ServerRenderContext.SSG, + const response = await angularServerApp.renderStatic( + new URL(url, 'http://local-angular-prerender'), + AbortSignal.timeout(30_000), ); return response ? response.text() : null; diff --git a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts index 52d2e78d7671..80afa0cfdccd 100644 --- a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts +++ b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts @@ -26,6 +26,8 @@ async function extractRoutes(): Promise { const routeTree = await extractRoutesAndCreateRouteTree( new URL('http://local-angular-prerender/'), + /** manifest */ undefined, + /** invokeGetPrerenderParams */ true, ); return routeTree.toObject(); diff --git a/packages/angular/ssr/BUILD.bazel b/packages/angular/ssr/BUILD.bazel index 3aa2635937cd..cc3d6291d2f5 100644 --- a/packages/angular/ssr/BUILD.bazel +++ b/packages/angular/ssr/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") +load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test", "api_golden_test_npm_package") load("@rules_pkg//:pkg.bzl", "pkg_tar") load("//tools:defaults.bzl", "ng_package", "ts_library") @@ -67,3 +67,13 @@ api_golden_test_npm_package( golden_dir = "angular_cli/goldens/public-api/angular/ssr", npm_package = "angular_cli/packages/angular/ssr/npm_package", ) + +api_golden_test( + name = "ssr_transitive_api", + data = [ + ":ssr", + "//goldens:public-api", + ], + entry_point = "angular_cli/packages/angular/ssr/public_api_transitive.d.ts", + golden = "angular_cli/goldens/public-api/angular/ssr/index_transitive.api.md", +) diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index bbcd30f70e2b..3ae8f16e10a4 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -56,7 +56,7 @@ export class AngularNodeAppEngine { * app.use(express.static('dist/browser', { * setHeaders: (res, path) => { * // Retrieve headers for the current request - * const headers = angularAppEngine.getHeaders(res.req); + * const headers = angularAppEngine.getPrerenderHeaders(res.req); * * // Apply the retrieved headers to the response * for (const { key, value } of headers) { @@ -66,7 +66,7 @@ export class AngularNodeAppEngine { })); * ``` */ - getHeaders(request: IncomingMessage): ReadonlyMap { - return this.angularAppEngine.getHeaders(createWebRequestFromNodeRequest(request)); + getPrerenderHeaders(request: IncomingMessage): ReadonlyMap { + return this.angularAppEngine.getPrerenderHeaders(createWebRequestFromNodeRequest(request)); } } diff --git a/packages/angular/ssr/private_export.ts b/packages/angular/ssr/private_export.ts index cfed1c49ad14..273633b484fd 100644 --- a/packages/angular/ssr/private_export.ts +++ b/packages/angular/ssr/private_export.ts @@ -12,7 +12,6 @@ export { extractRoutesAndCreateRouteTree as ɵextractRoutesAndCreateRouteTree, } from './src/routes/ng-routes'; export { - ServerRenderContext as ɵServerRenderContext, getOrCreateAngularServerApp as ɵgetOrCreateAngularServerApp, destroyAngularServerApp as ɵdestroyAngularServerApp, } from './src/app'; diff --git a/packages/angular/ssr/public_api.ts b/packages/angular/ssr/public_api.ts index c17a02e75b6b..3b6f53e4f292 100644 --- a/packages/angular/ssr/public_api.ts +++ b/packages/angular/ssr/public_api.ts @@ -9,3 +9,10 @@ export * from './private_export'; export { AngularAppEngine } from './src/app-engine'; + +export { + type PrerenderFallback, + type RenderMode, + type ServerRoute, + provideServerRoutesConfig, +} from './src/routes/route-config'; diff --git a/packages/angular/ssr/public_api_transitive.ts b/packages/angular/ssr/public_api_transitive.ts new file mode 100644 index 000000000000..0acba4c214c4 --- /dev/null +++ b/packages/angular/ssr/public_api_transitive.ts @@ -0,0 +1,20 @@ +/** + * @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.dev/license + */ + +// This file exports symbols that are not part of the public API but are +// dependencies of public API symbols. Including them here ensures they +// are tracked in the API golden file, preventing accidental breaking changes. + +export type { + ServerRouteAppShell, + ServerRouteClient, + ServerRoutePrerender, + ServerRoutePrerenderWithParams, + ServerRouteServer, + ServerRouteCommon, +} from './src/routes/route-config'; diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 96933fd8d41c..93e1653fa8c5 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -110,7 +110,7 @@ export class AngularAppEngine { * @returns A `Map` containing the HTTP headers as key-value pairs. * @note This function should be used exclusively for retrieving headers of SSG pages. */ - getHeaders(request: Request): ReadonlyMap { + getPrerenderHeaders(request: Request): ReadonlyMap { if (this.manifest.staticPathsHeaders.size === 0) { return new Map(); } diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index 4fd81077ec8e..06ff1f7e5c2b 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -6,25 +6,34 @@ * found in the LICENSE file at https://angular.dev/license */ -import { StaticProvider, ɵConsole, ɵresetCompiledComponents } from '@angular/core'; -import { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server'; +import { StaticProvider, ɵresetCompiledComponents } from '@angular/core'; import { ServerAssets } from './assets'; -import { Console } from './console'; import { Hooks } from './hooks'; import { getAngularAppManifest } from './manifest'; +import { RenderMode } from './routes/route-config'; import { ServerRouter } from './routes/router'; import { REQUEST, REQUEST_CONTEXT, RESPONSE_INIT } from './tokens'; import { InlineCriticalCssProcessor } from './utils/inline-critical-css'; import { AngularBootstrap, renderAngular } from './utils/ng'; /** - * Enum representing the different contexts in which server rendering can occur. + * A mapping of `RenderMode` enum values to corresponding string representations. + * + * This record is used to map each `RenderMode` to a specific string value that represents + * the server context. The string values are used internally to differentiate + * between various rendering strategies when processing routes. + * + * - `RenderMode.Prerender` maps to `'ssg'` (Static Site Generation). + * - `RenderMode.Server` maps to `'ssr'` (Server-Side Rendering). + * - `RenderMode.AppShell` maps to `'app-shell'` (pre-rendered application shell). + * - `RenderMode.Client` maps to an empty string `''` (Client-Side Rendering, no server context needed). */ -export enum ServerRenderContext { - SSR = 'ssr', - SSG = 'ssg', - AppShell = 'app-shell', -} +const SERVER_CONTEXT_VALUE: Record = { + [RenderMode.Prerender]: 'ssg', + [RenderMode.Server]: 'ssr', + [RenderMode.AppShell]: 'app-shell', + [RenderMode.Client]: '', +}; /** * Represents a locale-specific Angular server application managed by the server application engine. @@ -70,18 +79,31 @@ export class AngularServerApp { * * @param request - The incoming HTTP request to be rendered. * @param requestContext - Optional additional context for rendering, such as request metadata. - * @param serverContext - The rendering context. * * @returns A promise that resolves to the HTTP response object resulting from the rendering, or null if no match is found. */ - render( - request: Request, - requestContext?: unknown, - serverContext: ServerRenderContext = ServerRenderContext.SSR, - ): Promise { + render(request: Request, requestContext?: unknown): Promise { + return Promise.race([ + this.createAbortPromise(request), + this.handleRendering(request, /** isSsrMode */ true, requestContext), + ]); + } + + /** + * Renders a page based on the provided URL via server-side rendering and returns the corresponding HTTP response. + * The rendering process can be interrupted by an abort signal, where the first resolved promise (either from the abort + * or the render process) will dictate the outcome. + * + * @param url - The full URL to be processed and rendered by the server. + * @param signal - (Optional) An `AbortSignal` object that allows for the cancellation of the rendering process. + * @returns A promise that resolves to the generated HTTP response object, or `null` if no matching route is found. + */ + renderStatic(url: URL, signal?: AbortSignal): Promise { + const request = new Request(url, { signal }); + return Promise.race([ this.createAbortPromise(request), - this.handleRendering(request, requestContext, serverContext), + this.handleRendering(request, /** isSsrMode */ false), ]); } @@ -112,15 +134,15 @@ export class AngularServerApp { * This method matches the request URL to a route and performs rendering if a matching route is found. * * @param request - The incoming HTTP request to be processed. + * @param isSsrMode - A boolean indicating whether the rendering is performed in server-side rendering (SSR) mode. * @param requestContext - Optional additional context for rendering, such as request metadata. - * @param serverContext - The rendering context. Defaults to server-side rendering (SSR). * * @returns A promise that resolves to the rendered response, or null if no matching route is found. */ private async handleRendering( request: Request, + isSsrMode: boolean, requestContext?: unknown, - serverContext: ServerRenderContext = ServerRenderContext.SSR, ): Promise { const url = new URL(request.url); this.router ??= await ServerRouter.from(this.manifest, url); @@ -131,32 +153,33 @@ export class AngularServerApp { return null; } - const { redirectTo } = matchedRoute; + const { redirectTo, status } = matchedRoute; if (redirectTo !== undefined) { + // Note: The status code is validated during route extraction. // 302 Found is used by default for redirections // See: https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static#status - return Response.redirect(new URL(redirectTo, url), 302); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return Response.redirect(new URL(redirectTo, url), (status as any) ?? 302); } - const platformProviders: StaticProvider[] = [ - { - provide: SERVER_CONTEXT, - useValue: serverContext, - }, - { - // An Angular Console Provider that does not print a set of predefined logs. - provide: ɵConsole, - // Using `useClass` would necessitate decorating `Console` with `@Injectable`, - // which would require switching from `ts_library` to `ng_module`. This change - // would also necessitate various patches of `@angular/bazel` to support ESM. - useFactory: () => new Console(), - }, - ]; - - const isSsrMode = serverContext === ServerRenderContext.SSR; - const responseInit: ResponseInit = {}; + const { renderMode = isSsrMode ? RenderMode.Server : RenderMode.Prerender, headers } = + matchedRoute; + + const platformProviders: StaticProvider[] = []; + let responseInit: ResponseInit | undefined; if (isSsrMode) { + // Initialize the response with status and headers if available. + responseInit = { + status, + headers: headers ? new Headers(headers) : undefined, + }; + + if (renderMode === RenderMode.Client) { + // Serve the client-side rendered version if the route is configured for CSR. + return new Response(await this.assets.getServerAsset('index.csr.html'), responseInit); + } + platformProviders.push( { provide: REQUEST, @@ -183,7 +206,13 @@ export class AngularServerApp { this.boostrap ??= await manifest.bootstrap(); - html = await renderAngular(html, this.boostrap, new URL(request.url), platformProviders); + html = await renderAngular( + html, + this.boostrap, + new URL(request.url), + platformProviders, + SERVER_CONTEXT_VALUE[renderMode], + ); if (manifest.inlineCriticalCss) { // Optionally inline critical CSS. diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index 01fc831deed0..583fa0000ece 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -13,6 +13,7 @@ import { Injector, createPlatformFactory, platformCore, + runInInjectionContext, ɵwhenStable as whenStable, ɵConsole, } from '@angular/core'; @@ -26,7 +27,29 @@ import { Console } from '../console'; import { AngularAppManifest, getAngularAppManifest } from '../manifest'; import { AngularBootstrap, isNgModule } from '../utils/ng'; import { joinUrlParts } from '../utils/url'; -import { RouteTree } from './route-tree'; +import { PrerenderFallback, RenderMode, SERVER_ROUTES_CONFIG, ServerRoute } from './route-config'; +import { RouteTree, RouteTreeNodeMetadata } from './route-tree'; + +/** + * Regular expression to match segments preceded by a colon in a string. + */ +const URL_PARAMETER_REGEXP = /(?; + +/** + * Metadata for a server configuration route tree node. + */ +type ServerConfigRouteTreeNodeMetadata = RouteTreeNodeMetadata & + ServerConfigRouteTreeAdditionalMetadata; /** * Result of extracting routes from an Angular application. @@ -39,95 +62,90 @@ interface AngularRouterConfigResult { baseHref: string; /** - * An array of `RouteResult` objects representing the application's routes. + * An array of `RouteTreeNodeMetadata` objects representing the application's routes. * - * Each `RouteResult` contains details about a specific route, such as its path and any + * Each `RouteTreeNodeMetadata` contains details about a specific route, such as its path and any * associated redirection targets. This array is asynchronously generated and * provides information on how routes are structured and resolved. - * - * Example: - * ```typescript - * const result: AngularRouterConfigResult = { - * baseHref: '/app/', - * routes: [ - * { route: '/home', redirectTo: '/welcome' }, - * { route: '/about' }, - * ], - * }; - * ``` - */ - routes: RouteResult[]; -} - -/** - * Represents the result of processing a route. - */ -interface RouteResult { - /** - * The resolved path of the route. - * - * This string represents the complete URL path for the route after it has been - * resolved, including any parent routes or path segments that have been joined. */ - route: string; + routes: RouteTreeNodeMetadata[]; /** - * The target path for route redirection, if applicable. + * Optional configuration for server routes. * - * If this route has a `redirectTo` property in the configuration, this field will - * contain the full resolved URL path that the route should redirect to. + * This property allows you to specify an array of server routes for configuration. + * If not provided, the default configuration or behavior will be used. */ - redirectTo?: string; + serverRoutesConfig?: ServerRoute[] | null; } /** - * Recursively traverses the Angular router configuration to retrieve routes. + * Traverses an array of route configurations to generate route tree node metadata. * - * Iterates through the router configuration, yielding each route along with its potential - * redirection or error status. Handles nested routes and lazy-loaded child routes. + * This function processes each route and its children, handling redirects, SSG (Static Site Generation) settings, + * and lazy-loaded routes. It yields route metadata for each route and its potential variants. * - * @param options - An object containing the parameters for traversing routes. - * @returns An async iterator yielding `RouteResult` objects. + * @param options - The configuration options for traversing routes. + * @returns An async iterable iterator of route tree node metadata. */ -async function* traverseRoutesConfig(options: { - /** The array of route configurations to process. */ +export async function* traverseRoutesConfig({ + routes, + compiler, + parentInjector, + parentRoute, + serverConfigRouteTree, + invokeGetPrerenderParams, +}: { routes: Route[]; - - /** The Angular compiler used to compile route modules. */ compiler: Compiler; - - /** The parent injector for lazy-loaded modules. */ parentInjector: Injector; - - /** The parent route path to prefix child routes. */ parentRoute: string; -}): AsyncIterableIterator { - const { routes, compiler, parentInjector, parentRoute } = options; - + serverConfigRouteTree: RouteTree | undefined; + invokeGetPrerenderParams: boolean; +}): AsyncIterableIterator { for (const route of routes) { const { path = '', redirectTo, loadChildren, children } = route; const currentRoutePath = joinUrlParts(parentRoute, path); - yield { + // Get route metadata from the server config route tree, if available + const metadata: ServerConfigRouteTreeNodeMetadata = { + ...(serverConfigRouteTree + ? getMatchedRouteMetadata(serverConfigRouteTree, currentRoutePath) + : undefined), route: currentRoutePath, - redirectTo: - typeof redirectTo === 'string' - ? resolveRedirectTo(currentRoutePath, redirectTo) - : undefined, }; + // Handle redirects + if (typeof redirectTo === 'string') { + const redirectToResolved = resolveRedirectTo(currentRoutePath, redirectTo); + if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) { + throw new Error( + `The '${metadata.status}' status code is not a valid redirect response code. ` + + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`, + ); + } + yield { ...metadata, redirectTo: redirectToResolved }; + } else if (metadata.renderMode === RenderMode.Prerender) { + // Handle SSG routes + yield* handleSSGRoute(metadata, parentInjector, invokeGetPrerenderParams); + } else { + yield metadata; + } + + // Recursively process child routes if (children?.length) { - // Recursively process child routes. yield* traverseRoutesConfig({ routes: children, compiler, parentInjector, parentRoute: currentRoutePath, + serverConfigRouteTree, + invokeGetPrerenderParams, }); } + // Load and process lazy-loaded child routes if (loadChildren) { - // Load and process lazy-loaded child routes. const loadedChildRoutes = await loadChildrenHelper( route, compiler, @@ -141,12 +159,105 @@ async function* traverseRoutesConfig(options: { compiler, parentInjector: injector, parentRoute: currentRoutePath, + serverConfigRouteTree, + invokeGetPrerenderParams, }); } } } } +/** + * Retrieves the matched route metadata from the server configuration route tree. + * + * @param serverConfigRouteTree - The server configuration route tree. + * @param currentRoutePath - The current route path being processed. + * @returns The metadata associated with the matched route. + */ +function getMatchedRouteMetadata( + serverConfigRouteTree: RouteTree, + currentRoutePath: string, +): ServerConfigRouteTreeNodeMetadata { + const metadata = serverConfigRouteTree.match(currentRoutePath); + + if (!metadata) { + throw new Error( + `The '${currentRoutePath}' route does not match any route defined in the server routing configuration. ` + + 'Please ensure this route is added to the server routing configuration.', + ); + } + + return metadata; +} + +/** + * Handles SSG (Static Site Generation) routes by invoking `getPrerenderParams` and yielding + * all parameterized paths. + * + * @param metadata - The metadata associated with the route tree node. + * @param parentInjector - The dependency injection container for the parent route. + * @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function. + * @returns An async iterable iterator that yields route tree node metadata for each SSG path. + */ +async function* handleSSGRoute( + metadata: ServerConfigRouteTreeNodeMetadata, + parentInjector: Injector, + invokeGetPrerenderParams: boolean, +): AsyncIterableIterator { + if (metadata.renderMode !== RenderMode.Prerender) { + throw new Error( + `'handleSSGRoute' was called for a route which rendering mode is not prerender.`, + ); + } + + const { route: currentRoutePath, fallback, ...meta } = metadata; + const getPrerenderParams = 'getPrerenderParams' in meta ? meta.getPrerenderParams : undefined; + + if ('getPrerenderParams' in meta) { + delete meta['getPrerenderParams']; + } + + if (invokeGetPrerenderParams && URL_PARAMETER_REGEXP.test(currentRoutePath)) { + if (!getPrerenderParams) { + throw new Error( + `The '${currentRoutePath}' route uses prerendering and includes parameters, but 'getPrerenderParams' is missing. ` + + `Please define 'getPrerenderParams' function for this route in your server routing configuration ` + + `or specify a different 'renderMode'.`, + ); + } + + const parameters = await runInInjectionContext(parentInjector, () => getPrerenderParams()); + + for (const params of parameters) { + const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, (match) => { + const parameterName = match.slice(1); + const value = params[parameterName]; + if (typeof value !== 'string') { + throw new Error( + `The 'getPrerenderParams' function defined for the '${currentRoutePath}' route ` + + `returned a non-string value for parameter '${parameterName}'. ` + + `Please make sure the 'getPrerenderParams' function returns values for all parameters ` + + 'specified in this route.', + ); + } + + return value; + }); + + yield { ...meta, route: routeWithResolvedParams }; + } + } + + // Handle fallback render modes + if (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams) { + yield { + ...meta, + route: currentRoutePath, + renderMode: fallback === PrerenderFallback.Client ? RenderMode.Client : RenderMode.Server, + }; + } +} + /** * Resolves the `redirectTo` property for a given route. * @@ -171,18 +282,37 @@ function resolveRedirectTo(routePath: string, redirectTo: string): string { return joinUrlParts(...segments, redirectTo); } +/** + * Builds a server configuration route tree from the given server routes configuration. + * + * @param serverRoutesConfig - The array of server routes to be used for configuration. + * @returns A `RouteTree` populated with the server routes and their metadata. + */ +function buildServerConfigRouteTree( + serverRoutesConfig: ServerRoute[], +): RouteTree { + const serverConfigRouteTree = new RouteTree(); + for (const { path, ...metadata } of serverRoutesConfig) { + serverConfigRouteTree.insert(path, metadata); + } + + return serverConfigRouteTree; +} + /** * Retrieves routes from the given Angular application. * * This function initializes an Angular platform, bootstraps the application or module, * and retrieves routes from the Angular router configuration. It handles both module-based - * and function-based bootstrapping. It yields the resulting routes as `RouteResult` objects. + * and function-based bootstrapping. It yields the resulting routes as `RouteTreeNodeMetadata` objects. * * @param bootstrap - A function that returns a promise resolving to an `ApplicationRef` or an Angular module to bootstrap. * @param document - The initial HTML document used for server-side rendering. * This document is necessary to render the application on the server. * @param url - The URL for server-side rendering. The URL is used to configure `ServerPlatformLocation`. This configuration is crucial * for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction. + * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes + * to handle prerendering paths. Defaults to `false`. * See: * - https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51 * - https://github.com/angular/angular/blob/6882cc7d9eed26d3caeedca027452367ba25f2b9/packages/platform-server/src/http.ts#L44 @@ -192,6 +322,7 @@ export async function getRoutesFromAngularRouterConfig( bootstrap: AngularBootstrap, document: string, url: URL, + invokeGetPrerenderParams = false, ): Promise { const { protocol, host } = url; @@ -223,24 +354,31 @@ export async function getRoutesFromAngularRouterConfig( const injector = applicationRef.injector; const router = injector.get(Router); - const routesResults: RouteResult[] = []; + const routesResults: RouteTreeNodeMetadata[] = []; if (router.config.length) { const compiler = injector.get(Compiler); + const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true }); + const serverConfigRouteTree = serverRoutesConfig + ? buildServerConfigRouteTree(serverRoutesConfig) + : undefined; + // Retrieve all routes from the Angular router configuration. const traverseRoutes = traverseRoutesConfig({ routes: router.config, compiler, parentInjector: injector, parentRoute: '', + serverConfigRouteTree, + invokeGetPrerenderParams, }); for await (const result of traverseRoutes) { routesResults.push(result); } } else { - routesResults.push({ route: '' }); + routesResults.push({ route: '', renderMode: RenderMode.Prerender }); } const baseHref = @@ -267,23 +405,32 @@ export async function getRoutesFromAngularRouterConfig( * - https://github.com/angular/angular/blob/6882cc7d9eed26d3caeedca027452367ba25f2b9/packages/platform-server/src/http.ts#L44 * @param manifest - An optional `AngularAppManifest` that contains the application's routing and configuration details. * If not provided, the default manifest is retrieved using `getAngularAppManifest()`. - * + * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes + * to handle prerendering paths. Defaults to `false`. * @returns A promise that resolves to a populated `RouteTree` containing all extracted routes from the Angular application. */ export async function extractRoutesAndCreateRouteTree( url: URL, manifest: AngularAppManifest = getAngularAppManifest(), + invokeGetPrerenderParams = false, ): Promise { const routeTree = new RouteTree(); const document = await new ServerAssets(manifest).getIndexServerHtml(); const bootstrap = await manifest.bootstrap(); - const { baseHref, routes } = await getRoutesFromAngularRouterConfig(bootstrap, document, url); - - for (let { route, redirectTo } of routes) { - route = joinUrlParts(baseHref, route); - redirectTo = redirectTo === undefined ? undefined : joinUrlParts(baseHref, redirectTo); + const { baseHref, routes } = await getRoutesFromAngularRouterConfig( + bootstrap, + document, + url, + invokeGetPrerenderParams, + ); + + for (const { route, ...metadata } of routes) { + if (metadata.redirectTo !== undefined) { + metadata.redirectTo = joinUrlParts(baseHref, metadata.redirectTo); + } - routeTree.insert(route, { redirectTo }); + const fullRoute = joinUrlParts(baseHref, route); + routeTree.insert(fullRoute, metadata); } return routeTree; diff --git a/packages/angular/ssr/src/routes/route-config.ts b/packages/angular/ssr/src/routes/route-config.ts index 92e78dae33e1..ac6fd6203bca 100644 --- a/packages/angular/ssr/src/routes/route-config.ts +++ b/packages/angular/ssr/src/routes/route-config.ts @@ -17,27 +17,38 @@ export enum RenderMode { AppShell, /** Server-Side Rendering (SSR) mode, where content is rendered on the server for each request. */ - SSR, + Server, /** Client-Side Rendering (CSR) mode, where content is rendered on the client side in the browser. */ - CSR, + Client, /** Static Site Generation (SSG) mode, where content is pre-rendered at build time and served as static files. */ - SSG, + Prerender, } /** - * Fallback strategies for Static Site Generation (SSG) routes. + * Defines the fallback strategies for Static Site Generation (SSG) routes when a pre-rendered path is not available. + * This is particularly relevant for routes with parameterized URLs where some paths might not be pre-rendered at build time. + * * @developerPreview */ -export enum SSGFallback { - /** Use Server-Side Rendering (SSR) as the fallback for this route. */ - SSR, +export enum PrerenderFallback { + /** + * Fallback to Server-Side Rendering (SSR) if the pre-rendered path is not available. + * This strategy dynamically generates the page on the server at request time. + */ + Server, - /** Use Client-Side Rendering (CSR) as the fallback for this route. */ - CSR, + /** + * Fallback to Client-Side Rendering (CSR) if the pre-rendered path is not available. + * This strategy allows the page to be rendered on the client side. + */ + Client, - /** No fallback; Angular will not handle the response if the path is not pre-rendered. */ + /** + * No fallback; if the path is not pre-rendered, the server will not handle the request. + * This means the application will not provide any response for paths that are not pre-rendered. + */ None, } @@ -66,23 +77,38 @@ export interface ServerRouteAppShell extends Omit { +export interface ServerRoutePrerender extends Omit { /** Specifies that the route uses Static Site Generation (SSG) mode. */ - renderMode: RenderMode.SSG; + renderMode: RenderMode.Prerender; + /** Fallback cannot be specified unless `getPrerenderParams` is used. */ + fallback?: never; +} + +/** + * A server route configuration that uses Static Site Generation (SSG) mode, including support for routes with parameters. + */ +export interface ServerRoutePrerenderWithParams extends Omit { /** - * Optional fallback strategy to use if the SSG path is not pre-rendered. - * Defaults to `SSGFallback.SSR` if not provided. + * Optional strategy to use if the SSG path is not pre-rendered. + * This is especially relevant for routes with parameterized URLs, where some paths may not be pre-rendered at build time. + * + * This property determines how to handle requests for paths that are not pre-rendered: + * - `PrerenderFallback.Server`: Use Server-Side Rendering (SSR) to dynamically generate the page at request time. + * - `PrerenderFallback.Client`: Use Client-Side Rendering (CSR) to fetch and render the page on the client side. + * - `PrerenderFallback.None`: No fallback; if the path is not pre-rendered, the server will not handle the request. + * + * @default `PrerenderFallback.Server` if not provided. */ - fallback?: SSGFallback; + fallback?: PrerenderFallback; /** * A function that returns a Promise resolving to an array of objects, each representing a route path with URL parameters. @@ -96,8 +122,8 @@ export interface ServerRouteSSG extends Omit { * export const serverRouteConfig: ServerRoutes[] = [ * { * path: '/product/:id', - * remderMode: RenderMode.SSG, - * async getPrerenderPaths() { + * renderMode: RenderMode.Prerender, + * async getPrerenderParams() { * const productService = inject(ProductService); * const ids = await productService.getIds(); // Assuming this returns ['1', '2', '3'] * @@ -107,22 +133,27 @@ export interface ServerRouteSSG extends Omit { * ]; * ``` */ - getPrerenderPaths?: () => Promise[]>; + getPrerenderParams: () => Promise[]>; } /** * A server route that uses Server-Side Rendering (SSR) mode. */ -export interface ServerRouteSSR extends ServerRouteCommon { +export interface ServerRouteServer extends ServerRouteCommon { /** Specifies that the route uses Server-Side Rendering (SSR) mode. */ - renderMode: RenderMode.SSR; + renderMode: RenderMode.Server; } /** * Server route configuration. * @developerPreview */ -export type ServerRoute = ServerRouteAppShell | ServerRouteCSR | ServerRouteSSG | ServerRouteSSR; +export type ServerRoute = + | ServerRouteAppShell + | ServerRouteClient + | ServerRoutePrerender + | ServerRoutePrerenderWithParams + | ServerRouteServer; /** * Token for providing the server routes configuration. diff --git a/packages/angular/ssr/src/routes/route-tree.ts b/packages/angular/ssr/src/routes/route-tree.ts index 6ad907d6c64b..f3b07859cc28 100644 --- a/packages/angular/ssr/src/routes/route-tree.ts +++ b/packages/angular/ssr/src/routes/route-tree.ts @@ -7,6 +7,7 @@ */ import { stripTrailingSlash } from '../utils/url'; +import { RenderMode } from './route-config'; /** * Represents the serialized format of a route tree as an array of node metadata objects. @@ -49,13 +50,30 @@ export interface RouteTreeNodeMetadata { * structure and content of the application. */ route: string; + + /** + * Optional status code to return for this route. + */ + status?: number; + + /** + * Optional additional headers to include in the response for this route. + */ + headers?: Record; + + /** + * Specifies the rendering mode used for this route. + * If not provided, the default rendering mode for the application will be used. + */ + renderMode?: RenderMode; } /** * Represents a node within the route tree structure. * Each node corresponds to a route segment and may have associated metadata and child nodes. + * The `AdditionalMetadata` type parameter allows for extending the node metadata with custom data. */ -interface RouteTreeNode { +interface RouteTreeNode> { /** * The segment value associated with this node. * A segment is a single part of a route path, typically delimited by slashes (`/`). @@ -74,20 +92,22 @@ interface RouteTreeNode { /** * A map of child nodes, keyed by their corresponding route segment or wildcard. */ - children: Map; + children: Map>; /** * Optional metadata associated with this node, providing additional information such as redirects. */ - metadata?: RouteTreeNodeMetadata; + metadata?: RouteTreeNodeMetadata & AdditionalMetadata; } /** * A route tree implementation that supports efficient route matching, including support for wildcard routes. * This structure is useful for organizing and retrieving routes in a hierarchical manner, * enabling complex routing scenarios with nested paths. + * + * @typeParam AdditionalMetadata - Type of additional metadata that can be associated with route nodes. */ -export class RouteTree { +export class RouteTree = {}> { /** * The root node of the route tree. * All routes are stored and accessed relative to this root node. @@ -109,7 +129,7 @@ export class RouteTree { * @param route - The route path to insert into the tree. * @param metadata - Metadata associated with the route, excluding the route path itself. */ - insert(route: string, metadata: RouteTreeNodeMetadataWithoutRoute): void { + insert(route: string, metadata: RouteTreeNodeMetadataWithoutRoute & AdditionalMetadata): void { let node = this.root; const normalizedRoute = stripTrailingSlash(route); const segments = normalizedRoute.split('/'); @@ -144,7 +164,7 @@ export class RouteTree { * @param route - The route path to match against the route tree. * @returns The metadata of the best matching route or `undefined` if no match is found. */ - match(route: string): RouteTreeNodeMetadata | undefined { + match(route: string): (RouteTreeNodeMetadata & AdditionalMetadata) | undefined { const segments = stripTrailingSlash(route).split('/'); return this.traverseBySegments(segments)?.metadata; @@ -188,7 +208,7 @@ export class RouteTree { * * @param node - The current node to start the traversal from. Defaults to the root node of the tree. */ - private *traverse(node = this.root): Generator { + private *traverse(node = this.root): Generator { if (node.metadata) { yield node.metadata; } @@ -213,7 +233,7 @@ export class RouteTree { private traverseBySegments( remainingSegments: string[] | undefined, node = this.root, - ): RouteTreeNode | undefined { + ): RouteTreeNode | undefined { const { metadata, children } = node; // If there are no remaining segments and the node has metadata, return this node @@ -231,7 +251,7 @@ export class RouteTree { } const [segment, ...restSegments] = remainingSegments; - let currentBestMatchNode: RouteTreeNode | undefined; + let currentBestMatchNode: RouteTreeNode | undefined; // 1. Exact segment match const exactMatchNode = node.children.get(segment); @@ -263,9 +283,9 @@ export class RouteTree { * @returns The node with higher priority (i.e., lower insertion index). If one of the nodes is `undefined`, the other node is returned. */ private getHigherPriorityNode( - currentBestMatchNode: RouteTreeNode | undefined, - candidateNode: RouteTreeNode | undefined, - ): RouteTreeNode | undefined { + currentBestMatchNode: RouteTreeNode | undefined, + candidateNode: RouteTreeNode | undefined, + ): RouteTreeNode | undefined { if (!candidateNode) { return currentBestMatchNode; } @@ -286,7 +306,7 @@ export class RouteTree { * @param segment - The route segment that this node represents. * @returns A new, empty route tree node. */ - private createEmptyRouteTreeNode(segment: string): RouteTreeNode { + private createEmptyRouteTreeNode(segment: string): RouteTreeNode { return { segment, insertionIndex: -1, diff --git a/packages/angular/ssr/src/utils/ng.ts b/packages/angular/ssr/src/utils/ng.ts index 148e3f053398..55faa0adb205 100644 --- a/packages/angular/ssr/src/utils/ng.ts +++ b/packages/angular/ssr/src/utils/ng.ts @@ -6,8 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ +import { ɵConsole } from '@angular/core'; import type { ApplicationRef, StaticProvider, Type } from '@angular/core'; -import { renderApplication, renderModule } from '@angular/platform-server'; +import { + ɵSERVER_CONTEXT as SERVER_CONTEXT, + renderApplication, + renderModule, +} from '@angular/platform-server'; +import { Console } from '../console'; import { stripIndexHtmlFromURL } from './url'; /** @@ -33,6 +39,8 @@ export type AngularBootstrap = Type | (() => Promise); * correctly handle route-based rendering. * @param platformProviders - An array of platform providers to be used during the * rendering process. + * @param serverContext - A string representing the server context, used to provide additional + * context or metadata during server-side rendering. * @returns A promise that resolves to a string containing the rendered HTML. */ export function renderAngular( @@ -40,7 +48,24 @@ export function renderAngular( bootstrap: AngularBootstrap, url: URL, platformProviders: StaticProvider[], + serverContext: string, ): Promise { + const providers = [ + { + provide: SERVER_CONTEXT, + useValue: serverContext, + }, + { + // An Angular Console Provider that does not print a set of predefined logs. + provide: ɵConsole, + // Using `useClass` would necessitate decorating `Console` with `@Injectable`, + // which would require switching from `ts_library` to `ng_module`. This change + // would also necessitate various patches of `@angular/bazel` to support ESM. + useFactory: () => new Console(), + }, + ...platformProviders, + ]; + // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`. const urlToRender = stripIndexHtmlFromURL(url).toString(); @@ -48,12 +73,12 @@ export function renderAngular( ? renderModule(bootstrap, { url: urlToRender, document: html, - extraProviders: platformProviders, + extraProviders: providers, }) : renderApplication(bootstrap, { url: urlToRender, document: html, - platformProviders, + platformProviders: providers, }); } diff --git a/packages/angular/ssr/test/BUILD.bazel b/packages/angular/ssr/test/BUILD.bazel index 7ccd8023cb9a..fdd0e53b2913 100644 --- a/packages/angular/ssr/test/BUILD.bazel +++ b/packages/angular/ssr/test/BUILD.bazel @@ -6,6 +6,7 @@ ESM_TESTS = [ "app_spec.ts", "app-engine_spec.ts", "routes/router_spec.ts", + "routes/ng-routes_spec.ts", ] ts_library( diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index f79490101273..7384f62456c1 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +// The compiler is needed as tests are in JIT. /* eslint-disable import/no-unassigned-import */ import '@angular/compiler'; /* eslint-enable import/no-unassigned-import */ @@ -14,6 +15,7 @@ import { Component } from '@angular/core'; import { destroyAngularServerApp, getOrCreateAngularServerApp } from '../src/app'; import { AngularAppEngine } from '../src/app-engine'; import { setAngularAppEngineManifest } from '../src/manifest'; +import { RenderMode } from '../src/routes/route-config'; import { setAngularAppTestingManifest } from './testing-utils'; describe('AngularAppEngine', () => { @@ -37,7 +39,11 @@ describe('AngularAppEngine', () => { }) class HomeComponent {} - setAngularAppTestingManifest([{ path: 'home', component: HomeComponent }], locale); + setAngularAppTestingManifest( + [{ path: 'home', component: HomeComponent }], + [{ path: '/**', renderMode: RenderMode.Server }], + locale, + ); return { ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, @@ -99,10 +105,10 @@ describe('AngularAppEngine', () => { }); }); - describe('getHeaders', () => { + describe('getPrerenderHeaders', () => { it('should return headers for a known path without index.html', () => { const request = new Request('https://example.com/about'); - const headers = appEngine.getHeaders(request); + const headers = appEngine.getPrerenderHeaders(request); expect(Object.fromEntries(headers.entries())).toEqual({ 'Cache-Control': 'no-cache', 'X-Some-Header': 'value', @@ -111,7 +117,7 @@ describe('AngularAppEngine', () => { it('should return headers for a known path with index.html', () => { const request = new Request('https://example.com/about/index.html'); - const headers = appEngine.getHeaders(request); + const headers = appEngine.getPrerenderHeaders(request); expect(Object.fromEntries(headers.entries())).toEqual({ 'Cache-Control': 'no-cache', 'X-Some-Header': 'value', @@ -120,7 +126,7 @@ describe('AngularAppEngine', () => { it('should return no headers for unknown paths', () => { const request = new Request('https://example.com/unknown/path'); - const headers = appEngine.getHeaders(request); + const headers = appEngine.getPrerenderHeaders(request); expect(headers).toHaveSize(0); }); }); @@ -142,7 +148,10 @@ describe('AngularAppEngine', () => { }) class HomeComponent {} - setAngularAppTestingManifest([{ path: 'home', component: HomeComponent }]); + setAngularAppTestingManifest( + [{ path: 'home', component: HomeComponent }], + [{ path: '/**', renderMode: RenderMode.Server }], + ); return { ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, diff --git a/packages/angular/ssr/test/app_spec.ts b/packages/angular/ssr/test/app_spec.ts index 274095a1a297..82a70bd0219e 100644 --- a/packages/angular/ssr/test/app_spec.ts +++ b/packages/angular/ssr/test/app_spec.ts @@ -6,12 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ +// The compiler is needed as tests are in JIT. /* eslint-disable import/no-unassigned-import */ import '@angular/compiler'; /* eslint-enable import/no-unassigned-import */ import { Component } from '@angular/core'; -import { AngularServerApp, ServerRenderContext, destroyAngularServerApp } from '../src/app'; +import { AngularServerApp, destroyAngularServerApp } from '../src/app'; +import { RenderMode } from '../src/routes/route-config'; import { setAngularAppTestingManifest } from './testing-utils'; describe('AngularServerApp', () => { @@ -27,31 +29,45 @@ describe('AngularServerApp', () => { }) class HomeComponent {} - setAngularAppTestingManifest([ - { path: 'home', component: HomeComponent }, - { path: 'redirect', redirectTo: 'home' }, - { path: 'redirect/relative', redirectTo: 'home' }, - { path: 'redirect/absolute', redirectTo: '/home' }, - ]); + setAngularAppTestingManifest( + [ + { path: 'home', component: HomeComponent }, + { path: 'home-csr', component: HomeComponent }, + { path: 'page-with-headers', component: HomeComponent }, + { path: 'page-with-status', component: HomeComponent }, + { path: 'redirect', redirectTo: 'home' }, + { path: 'redirect/relative', redirectTo: 'home' }, + { path: 'redirect/absolute', redirectTo: '/home' }, + ], + [ + { + path: '/home-csr', + renderMode: RenderMode.Client, + }, + { + path: '/page-with-status', + renderMode: RenderMode.Server, + status: 201, + }, + { + path: '/page-with-headers', + renderMode: RenderMode.Server, + headers: { + 'Cache-Control': 'no-cache', + 'X-Some-Header': 'value', + }, + }, + { + path: '/**', + renderMode: RenderMode.Server, + }, + ], + ); app = new AngularServerApp(); }); describe('render', () => { - it(`should include 'ng-server-context="ssr"' by default`, async () => { - const response = await app.render(new Request('http://localhost/home')); - expect(await response?.text()).toContain('ng-server-context="ssr"'); - }); - - it(`should include the provided 'ng-server-context' value`, async () => { - const response = await app.render( - new Request('http://localhost/home'), - undefined, - ServerRenderContext.SSG, - ); - expect(await response?.text()).toContain('ng-server-context="ssg"'); - }); - it('should correctly render the content for the requested page', async () => { const response = await app.render(new Request('http://localhost/home')); expect(await response?.text()).toContain('Home works'); @@ -91,5 +107,41 @@ describe('AngularServerApp', () => { await expectAsync(app.render(request)).toBeRejectedWithError(/Request for: .+ was aborted/); }); + + it('should return configured headers for pages with specific header settings', async () => { + const response = await app.render(new Request('http://localhost/page-with-headers')); + const headers = response?.headers.entries() ?? []; + expect(Object.fromEntries(headers)).toEqual({ + 'cache-control': 'no-cache', + 'x-some-header': 'value', + 'content-type': 'text/plain;charset=UTF-8', + }); + }); + + it('should return only default headers for pages without specific header configurations', async () => { + const response = await app.render(new Request('http://localhost/home')); + const headers = response?.headers.entries() ?? []; + expect(Object.fromEntries(headers)).toEqual({ + 'content-type': 'text/plain;charset=UTF-8', // default header + }); + }); + + it('should return the configured status for pages with specific status settings', async () => { + const response = await app.render(new Request('http://localhost/page-with-status')); + expect(response?.status).toBe(201); + }); + + it('should return static `index.csr.html` for routes with CSR rendering mode', async () => { + const response = await app.render(new Request('http://localhost/home-csr')); + const content = await response?.text(); + + expect(content).toContain('CSR page'); + expect(content).not.toContain('ng-server-context'); + }); + + it('should include `ng-server-context="ssr"` for SSR rendering mode', async () => { + const response = await app.render(new Request('http://localhost/home')); + expect(await response?.text()).toContain('ng-server-context="ssr"'); + }); }); }); diff --git a/packages/angular/ssr/test/routes/ng-routes_spec.ts b/packages/angular/ssr/test/routes/ng-routes_spec.ts new file mode 100644 index 000000000000..da347f9768f0 --- /dev/null +++ b/packages/angular/ssr/test/routes/ng-routes_spec.ts @@ -0,0 +1,176 @@ +/** + * @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.dev/license + */ + +// The compiler is needed as tests are in JIT. +/* eslint-disable import/no-unassigned-import */ +import '@angular/compiler'; +/* eslint-enable import/no-unassigned-import */ + +import { Component } from '@angular/core'; +import { extractRoutesAndCreateRouteTree } from '../../src/routes/ng-routes'; +import { PrerenderFallback, RenderMode } from '../../src/routes/route-config'; +import { setAngularAppTestingManifest } from '../testing-utils'; + +describe('extractRoutesAndCreateRouteTree', () => { + const url = new URL('http://localhost'); + + @Component({ + standalone: true, + selector: 'app-dummy-comp', + template: `dummy works`, + }) + class DummyComponent {} + + it('should extract routes and create a route tree', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'redirect', redirectTo: 'home' }, + { path: 'user/:id', component: DummyComponent }, + ], + [ + { path: '/home', renderMode: RenderMode.Client }, + { path: '/redirect', renderMode: RenderMode.Server, status: 301 }, + { path: '/**', renderMode: RenderMode.Server }, + ], + ); + + const routeTree = await extractRoutesAndCreateRouteTree(url); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Client }, + { route: '/redirect', renderMode: RenderMode.Server, status: 301, redirectTo: '/home' }, + { route: '/user/:id', renderMode: RenderMode.Server }, + ]); + }); + + describe('when `invokeGetPrerenderParams` is true', () => { + it('should resolve parameterized routes for SSG and add a fallback route if fallback is Server', async () => { + setAngularAppTestingManifest( + [{ path: 'user/:id/role/:role', component: DummyComponent }], + [ + { + path: 'user/:id/role/:role', + renderMode: RenderMode.Prerender, + fallback: PrerenderFallback.Server, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + ], + ); + + const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(routeTree.toObject()).toEqual([ + { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, + { + route: '/user/jane/role/writer', + renderMode: RenderMode.Prerender, + }, + { route: '/user/:id/role/:role', renderMode: RenderMode.Server }, + ]); + }); + + it('should resolve parameterized routes for SSG and add a fallback route if fallback is Client', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'user/:id/role/:role', component: DummyComponent }, + ], + [ + { + path: 'user/:id/role/:role', + renderMode: RenderMode.Prerender, + fallback: PrerenderFallback.Client, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + { path: '/**', renderMode: RenderMode.Server }, + ], + ); + + const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Server }, + { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, + { + route: '/user/jane/role/writer', + renderMode: RenderMode.Prerender, + }, + { route: '/user/:id/role/:role', renderMode: RenderMode.Client }, + ]); + }); + + it('should resolve parameterized routes for SSG and not add a fallback route if fallback is None', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'user/:id/role/:role', component: DummyComponent }, + ], + [ + { + path: 'user/:id/role/:role', + renderMode: RenderMode.Prerender, + fallback: PrerenderFallback.None, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + { path: '/**', renderMode: RenderMode.Server }, + ], + ); + + const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Server }, + { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, + { + route: '/user/jane/role/writer', + renderMode: RenderMode.Prerender, + }, + ]); + }); + }); + + it('should not resolve parameterized routes for SSG when `invokeGetPrerenderParams` is false', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'user/:id/role/:role', component: DummyComponent }, + ], + [ + { + path: 'user/:id/role/:role', + renderMode: RenderMode.Prerender, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + { path: '/**', renderMode: RenderMode.Server }, + ], + ); + + const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, false); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Server }, + { route: '/user/:id/role/:role', renderMode: RenderMode.Server }, + ]); + }); +}); diff --git a/packages/angular/ssr/test/routes/router_spec.ts b/packages/angular/ssr/test/routes/router_spec.ts index 6d2661261d39..dc87a8e593e6 100644 --- a/packages/angular/ssr/test/routes/router_spec.ts +++ b/packages/angular/ssr/test/routes/router_spec.ts @@ -6,8 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ +// The compiler is needed as tests are in JIT. +/* eslint-disable import/no-unassigned-import */ +import '@angular/compiler'; +/* eslint-enable import/no-unassigned-import */ + import { Component } from '@angular/core'; import { AngularAppManifest, getAngularAppManifest } from '../../src/manifest'; +import { RenderMode } from '../../src/routes/route-config'; import { ServerRouter } from '../../src/routes/router'; import { setAngularAppTestingManifest } from '../testing-utils'; @@ -23,12 +29,18 @@ describe('ServerRouter', () => { }) class DummyComponent {} - setAngularAppTestingManifest([ - { path: 'home', component: DummyComponent }, - { path: 'redirect', redirectTo: 'home' }, - { path: 'encoding url', component: DummyComponent }, - { path: 'user/:id', component: DummyComponent }, - ]); + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'redirect', redirectTo: 'home' }, + { path: 'encoding url', component: DummyComponent }, + { path: 'user/:id', component: DummyComponent }, + ], + [ + { path: '/redirect', renderMode: RenderMode.Server, status: 301 }, + { path: '/**', renderMode: RenderMode.Server }, + ], + ); manifest = getAngularAppManifest(); }); @@ -40,15 +52,17 @@ describe('ServerRouter', () => { // Check that routes are correctly built expect(router.match(new URL('http://localhost/home'))).toEqual({ route: '/home', - redirectTo: undefined, + renderMode: RenderMode.Server, }); expect(router.match(new URL('http://localhost/redirect'))).toEqual({ redirectTo: '/home', route: '/redirect', + renderMode: RenderMode.Server, + status: 301, }); expect(router.match(new URL('http://localhost/user/123'))).toEqual({ route: '/user/:id', - redirectTo: undefined, + renderMode: RenderMode.Server, }); }); @@ -70,9 +84,20 @@ describe('ServerRouter', () => { const redirectMetadata = router.match(new URL('http://localhost/redirect')); const userMetadata = router.match(new URL('http://localhost/user/123')); - expect(homeMetadata).toEqual({ route: '/home', redirectTo: undefined }); - expect(redirectMetadata).toEqual({ redirectTo: '/home', route: '/redirect' }); - expect(userMetadata).toEqual({ route: '/user/:id', redirectTo: undefined }); + expect(homeMetadata).toEqual({ + route: '/home', + renderMode: RenderMode.Server, + }); + expect(redirectMetadata).toEqual({ + redirectTo: '/home', + route: '/redirect', + status: 301, + renderMode: RenderMode.Server, + }); + expect(userMetadata).toEqual({ + route: '/user/:id', + renderMode: RenderMode.Server, + }); }); it('should correctly match URLs ending with /index.html', () => { @@ -80,14 +105,28 @@ describe('ServerRouter', () => { const userMetadata = router.match(new URL('http://localhost/user/123/index.html')); const redirectMetadata = router.match(new URL('http://localhost/redirect/index.html')); - expect(homeMetadata).toEqual({ route: '/home', redirectTo: undefined }); - expect(redirectMetadata).toEqual({ redirectTo: '/home', route: '/redirect' }); - expect(userMetadata).toEqual({ route: '/user/:id', redirectTo: undefined }); + expect(homeMetadata).toEqual({ + route: '/home', + renderMode: RenderMode.Server, + }); + expect(redirectMetadata).toEqual({ + redirectTo: '/home', + route: '/redirect', + status: 301, + renderMode: RenderMode.Server, + }); + expect(userMetadata).toEqual({ + route: '/user/:id', + renderMode: RenderMode.Server, + }); }); it('should handle encoded URLs', () => { const encodedUserMetadata = router.match(new URL('http://localhost/encoding%20url')); - expect(encodedUserMetadata).toEqual({ route: '/encoding url', redirectTo: undefined }); + expect(encodedUserMetadata).toEqual({ + route: '/encoding url', + renderMode: RenderMode.Server, + }); }); }); }); diff --git a/packages/angular/ssr/test/testing-utils.ts b/packages/angular/ssr/test/testing-utils.ts index 7eb0ddf7683d..4a5d5345fdc1 100644 --- a/packages/angular/ssr/test/testing-utils.ts +++ b/packages/angular/ssr/test/testing-utils.ts @@ -11,6 +11,7 @@ import { bootstrapApplication } from '@angular/platform-browser'; import { provideServerRendering } from '@angular/platform-server'; import { RouterOutlet, Routes, provideRouter } from '@angular/router'; import { setAngularAppManifest } from '../src/manifest'; +import { ServerRoute, provideServerRoutesConfig } from '../src/routes/route-config'; /** * Configures the Angular application for testing by setting up the Angular app manifest, @@ -19,23 +20,40 @@ import { setAngularAppManifest } from '../src/manifest'; * Angular components and providers for testing purposes. * * @param routes - An array of route definitions to be used by the Angular Router. + * @param serverRoutes - An array of ServerRoute definitions to be used for server-side rendering. * @param [baseHref=''] - An optional base href to be used in the HTML template. */ -export function setAngularAppTestingManifest(routes: Routes, baseHref = ''): void { +export function setAngularAppTestingManifest( + routes: Routes, + serverRoutes: ServerRoute[], + baseHref = '', +): void { setAngularAppManifest({ inlineCriticalCss: false, assets: new Map( Object.entries({ 'index.server.html': async () => - ` - - - - - - - -`, + ` + + SSR page + + + + + + + `, + 'index.csr.html': async () => + ` + + CSR page + + + + + + + `, }), ), bootstrap: async () => () => { @@ -52,6 +70,7 @@ export function setAngularAppTestingManifest(routes: Routes, baseHref = ''): voi provideServerRendering(), provideExperimentalZonelessChangeDetection(), provideRouter(routes), + provideServerRoutesConfig(serverRoutes), ], }); }, diff --git a/packages/angular_devkit/build_angular/src/builders/app-shell/app-shell_spec.ts b/packages/angular_devkit/build_angular/src/builders/app-shell/app-shell_spec.ts index 9cbd3be9bd3c..b40e1d60a9d9 100644 --- a/packages/angular_devkit/build_angular/src/builders/app-shell/app-shell_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/app-shell/app-shell_spec.ts @@ -125,7 +125,8 @@ describe('AppShell Builder', () => { const fileName = 'dist/index.html'; const content = virtualFs.fileBufferToString(host.scopedSync().read(normalize(fileName))); expect(content).toMatch('Welcome to app'); - expect(content).toMatch('ng-server-context="app-shell"'); + // TODO(alanagius): enable once integration of routes in complete. + // expect(content).toMatch('ng-server-context="app-shell"'); }); it('works with route', async () => { From ac71ce121e40763f370a47f489a14f12aab5f688 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 13 Sep 2024 05:14:56 +0000 Subject: [PATCH 31/53] build: update dependency chokidar to v4 --- package.json | 2 +- packages/angular_devkit/core/package.json | 2 +- yarn.lock | 22 +++++++++++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index fdeb04a84fbb..c214616bba81 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "browser-sync": "3.0.2", "browserslist": "^4.21.5", "buffer": "6.0.3", - "chokidar": "3.6.0", + "chokidar": "4.0.0", "copy-webpack-plugin": "12.0.2", "critters": "0.0.24", "css-loader": "7.1.2", diff --git a/packages/angular_devkit/core/package.json b/packages/angular_devkit/core/package.json index fcb80f3a17d7..5d6b1ba59755 100644 --- a/packages/angular_devkit/core/package.json +++ b/packages/angular_devkit/core/package.json @@ -33,7 +33,7 @@ "source-map": "0.7.4" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { diff --git a/yarn.lock b/yarn.lock index 0a4486b6ad5c..f3ef4187ddd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -194,7 +194,7 @@ __metadata: rxjs: "npm:7.8.1" source-map: "npm:0.7.4" peerDependencies: - chokidar: ^3.5.2 + chokidar: ^4.0.0 peerDependenciesMeta: chokidar: optional: true @@ -704,7 +704,7 @@ __metadata: browser-sync: "npm:3.0.2" browserslist: "npm:^4.21.5" buffer: "npm:6.0.3" - chokidar: "npm:3.6.0" + chokidar: "npm:4.0.0" copy-webpack-plugin: "npm:12.0.2" critters: "npm:0.0.24" css-loader: "npm:7.1.2" @@ -7331,7 +7331,16 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.6.0, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.0.0, chokidar@npm:^3.4.3, chokidar@npm:^3.5.1, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": +"chokidar@npm:4.0.0": + version: 4.0.0 + resolution: "chokidar@npm:4.0.0" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/42d03c53b0ad200689e4fae7763133561480561cab8ba5304e8f2298ff45ff84bf0f6065c3f02b9e557b74b156813734439a1a2ff19a1ea6b35692395cd92738 + languageName: node + linkType: hard + +"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.0.0, chokidar@npm:^3.4.3, chokidar@npm:^3.5.1, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -15012,6 +15021,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.1 + resolution: "readdirp@npm:4.0.1" + checksum: 10c0/e5a0b547015f68ecc918f115b62b75b2b840611480a9240cb3317090a0ddac01bb9b40315a8fa08acdf52a43eea17b808c89b645263cba3ab64dc557d7f801f1 + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" From de17cbcb88e1f057f93d366c3e2eac4315986e54 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 13 Sep 2024 08:00:49 +0000 Subject: [PATCH 32/53] Revert "perf(@angular/cli): enable Node.js compile code cache when available" This reverts commit ecc107d83bfdfd9d5dd1087e264892d60361625c. --- .../tools/angular/compilation/parallel-compilation.ts | 7 +------ .../build/src/tools/esbuild/javascript-transformer.ts | 6 ------ packages/angular/build/src/tools/sass/sass-service.ts | 6 ------ packages/angular/build/src/typings.d.ts | 7 ------- packages/angular/cli/bin/bootstrap.js | 10 +--------- 5 files changed, 2 insertions(+), 34 deletions(-) diff --git a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts index 3a79ef73a061..225aa9eb1fa3 100644 --- a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts @@ -8,7 +8,7 @@ import type { CompilerOptions } from '@angular/compiler-cli'; import type { PartialMessage } from 'esbuild'; -import { createRequire, getCompileCacheDir } from 'node:module'; +import { createRequire } from 'node:module'; import { MessageChannel } from 'node:worker_threads'; import Piscina from 'piscina'; import type { SourceFile } from 'typescript'; @@ -41,11 +41,6 @@ export class ParallelCompilation extends AngularCompilation { useAtomics: !process.versions.webcontainer, filename: localRequire.resolve('./parallel-worker'), recordTiming: false, - env: { - ...process.env, - // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) - 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), - }, }); } diff --git a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts index 6dbf2a9596a9..ce4b0aa91356 100644 --- a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts +++ b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts @@ -8,7 +8,6 @@ import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; -import { getCompileCacheDir } from 'node:module'; import Piscina from 'piscina'; import { Cache } from './cache'; @@ -63,11 +62,6 @@ export class JavaScriptTransformer { // Shutdown idle threads after 1 second of inactivity idleTimeout: 1000, recordTiming: false, - env: { - ...process.env, - // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) - 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), - }, }); return this.#workerPool; diff --git a/packages/angular/build/src/tools/sass/sass-service.ts b/packages/angular/build/src/tools/sass/sass-service.ts index 0dd2ee1065c3..3e54e0ec1520 100644 --- a/packages/angular/build/src/tools/sass/sass-service.ts +++ b/packages/angular/build/src/tools/sass/sass-service.ts @@ -7,7 +7,6 @@ */ import assert from 'node:assert'; -import { getCompileCacheDir } from 'node:module'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { MessageChannel } from 'node:worker_threads'; import { Piscina } from 'piscina'; @@ -103,11 +102,6 @@ export class SassWorkerImplementation { // Shutdown idle threads after 1 second of inactivity idleTimeout: 1000, recordTiming: false, - env: { - ...process.env, - // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+) - 'NODE_COMPILE_CACHE': getCompileCacheDir?.(), - }, }); return this.#workerPool; diff --git a/packages/angular/build/src/typings.d.ts b/packages/angular/build/src/typings.d.ts index 7eaadcafc536..c784b3c4220a 100644 --- a/packages/angular/build/src/typings.d.ts +++ b/packages/angular/build/src/typings.d.ts @@ -17,10 +17,3 @@ declare module 'esbuild' { export * from 'esbuild-wasm'; } - -/** - * Augment the Node.js module builtin types to support the v22.8+ compile cache functions - */ -declare module 'node:module' { - function getCompileCacheDir(): string | undefined; -} diff --git a/packages/angular/cli/bin/bootstrap.js b/packages/angular/cli/bin/bootstrap.js index 1eefb72f05c1..96b978296dcc 100644 --- a/packages/angular/cli/bin/bootstrap.js +++ b/packages/angular/cli/bin/bootstrap.js @@ -18,12 +18,4 @@ * range. */ -// Enable on-disk code caching if available (Node.js 22.8+) -try { - const { enableCompileCache } = require('node:module'); - - enableCompileCache?.(); -} catch {} - -// Initialize the Angular CLI -void import('../lib/init.js'); +import('../lib/init.js'); From 62b2c6c91e1db2d0fe8c9afaf66839b10df87ae0 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 13 Sep 2024 09:56:38 +0000 Subject: [PATCH 33/53] release: cut the v19.0.0-next.6 release --- CHANGELOG.md | 18 ++++++++++++++++++ package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1ea08a037d6..d9ea3de8e1ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + + +# 19.0.0-next.6 (2024-09-13) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------- | +| [de17cbcb8](https://github.com/angular/angular-cli/commit/de17cbcb88e1f057f93d366c3e2eac4315986e54) | fix | Revert commit enable Node.js compile code cache when available | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------ | +| [d66aaa3ca](https://github.com/angular/angular-cli/commit/d66aaa3ca458e05b535bec7c1dcb98b0e9c5202e) | feat | add server routing configuration API | + + + # 19.0.0-next.5 (2024-09-12) diff --git a/package.json b/package.json index c214616bba81..b6fa30efa443 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "19.0.0-next.5", + "version": "19.0.0-next.6", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 740c6486e29151e2f6f72fcf6b38280014d752d8 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 11:30:20 +0000 Subject: [PATCH 34/53] refactor(@angular/build): implement custom middleware for header appending Replaced multiple `appendServerConfiguredHeaders` calls with a single custom middleware to append headers to all responses, simplifying the code and ensuring consistency. --- .../src/tools/vite/angular-memory-plugin.ts | 3 ++ .../vite/middlewares/assets-middleware.ts | 8 +--- .../vite/middlewares/headers-middleware.ts | 37 +++++++++++++++++++ .../vite/middlewares/index-html-middleware.ts | 7 +--- .../build/src/tools/vite/middlewares/index.ts | 1 + .../tools/vite/middlewares/ssr-middleware.ts | 2 - .../angular/build/src/tools/vite/utils.ts | 18 --------- 7 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts diff --git a/packages/angular/build/src/tools/vite/angular-memory-plugin.ts b/packages/angular/build/src/tools/vite/angular-memory-plugin.ts index 4a39ba50417d..3ceafc7fbd2d 100644 --- a/packages/angular/build/src/tools/vite/angular-memory-plugin.ts +++ b/packages/angular/build/src/tools/vite/angular-memory-plugin.ts @@ -14,6 +14,7 @@ import type { Connect, Plugin } from 'vite'; import { angularHtmlFallbackMiddleware, createAngularAssetsMiddleware, + createAngularHeadersMiddleware, createAngularIndexHtmlMiddleware, createAngularSSRMiddleware, } from './middlewares'; @@ -114,6 +115,8 @@ export function createAngularMemoryPlugin(options: AngularMemoryPluginOptions): }; }; + server.middlewares.use(createAngularHeadersMiddleware(server)); + // Assets and resources get handled first server.middlewares.use( createAngularAssetsMiddleware(server, assets, outputFiles, usedComponentStyles), diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index 8c2647949165..c77a1f83aa3d 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -10,11 +10,7 @@ import { lookup as lookupMimeType } from 'mrmime'; import { extname } from 'node:path'; import type { Connect, ViteDevServer } from 'vite'; import { loadEsmModule } from '../../../utils/load-esm'; -import { - AngularMemoryOutputFiles, - appendServerConfiguredHeaders, - pathnameWithoutBasePath, -} from '../utils'; +import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils'; const COMPONENT_REGEX = /%COMP%/g; @@ -97,7 +93,6 @@ export function createAngularAssetsMiddleware( res.setHeader('Content-Type', 'text/css'); res.setHeader('Cache-Control', 'no-cache'); - appendServerConfiguredHeaders(server, res); res.end(encapsulatedData); }) .catch((e) => next(e)); @@ -116,7 +111,6 @@ export function createAngularAssetsMiddleware( res.setHeader('Content-Type', mimeType); } res.setHeader('Cache-Control', 'no-cache'); - appendServerConfiguredHeaders(server, res); res.end(data); return; diff --git a/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts new file mode 100644 index 000000000000..acc631aee0ed --- /dev/null +++ b/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts @@ -0,0 +1,37 @@ +/** + * @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.dev/license + */ + +import type { ServerResponse } from 'node:http'; +import type { Connect, ViteDevServer } from 'vite'; + +/** + * Creates a middleware for adding custom headers. + * + * This middleware is responsible for setting HTTP headers as configured in the Vite server options. + * If headers are defined in the server configuration, they are applied to the server response. + * + * @param server - The instance of `ViteDevServer` containing the configuration, including custom headers. + * @returns A middleware function that processes the incoming request, sets headers if available, + * and passes control to the next middleware in the chain. + */ +export function createAngularHeadersMiddleware(server: ViteDevServer): Connect.NextHandleFunction { + return function (_req: Connect.IncomingMessage, res: ServerResponse, next: Connect.NextFunction) { + const headers = server.config.server.headers; + if (!headers) { + return next(); + } + + for (const [name, value] of Object.entries(headers)) { + if (value !== undefined) { + res.setHeader(name, value); + } + } + + next(); + }; +} diff --git a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts index 0dab0136c798..c43ae90d3663 100644 --- a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts @@ -8,11 +8,7 @@ import { extname } from 'node:path'; import type { Connect, ViteDevServer } from 'vite'; -import { - AngularMemoryOutputFiles, - appendServerConfiguredHeaders, - pathnameWithoutBasePath, -} from '../utils'; +import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils'; export function createAngularIndexHtmlMiddleware( server: ViteDevServer, @@ -52,7 +48,6 @@ export function createAngularIndexHtmlMiddleware( res.setHeader('Content-Type', 'text/html'); res.setHeader('Cache-Control', 'no-cache'); - appendServerConfiguredHeaders(server, res); res.end(processedHtml); }) .catch((error) => next(error)); diff --git a/packages/angular/build/src/tools/vite/middlewares/index.ts b/packages/angular/build/src/tools/vite/middlewares/index.ts index 1965fd22d0ee..924a18cd84ea 100644 --- a/packages/angular/build/src/tools/vite/middlewares/index.ts +++ b/packages/angular/build/src/tools/vite/middlewares/index.ts @@ -10,3 +10,4 @@ export { createAngularAssetsMiddleware } from './assets-middleware'; export { angularHtmlFallbackMiddleware } from './html-fallback-middleware'; export { createAngularIndexHtmlMiddleware } from './index-html-middleware'; export { createAngularSSRMiddleware } from './ssr-middleware'; +export { createAngularHeadersMiddleware } from './headers-middleware'; diff --git a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts index 496e021b5038..e5542cce61ae 100644 --- a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts @@ -9,7 +9,6 @@ import type { ɵgetOrCreateAngularServerApp as getOrCreateAngularServerApp } from '@angular/ssr'; import type { ServerResponse } from 'node:http'; import type { Connect, ViteDevServer } from 'vite'; -import { appendServerConfiguredHeaders } from '../utils'; export function createAngularSSRMiddleware( server: ViteDevServer, @@ -55,7 +54,6 @@ export function createAngularSSRMiddleware( return next(); } - appendServerConfiguredHeaders(server, res); res.end(content); }) .catch((error) => next(error)); diff --git a/packages/angular/build/src/tools/vite/utils.ts b/packages/angular/build/src/tools/vite/utils.ts index 2e14055ebce0..4e922ee1d458 100644 --- a/packages/angular/build/src/tools/vite/utils.ts +++ b/packages/angular/build/src/tools/vite/utils.ts @@ -7,9 +7,7 @@ */ import { lookup as lookupMimeType } from 'mrmime'; -import type { IncomingMessage, ServerResponse } from 'node:http'; import { extname } from 'node:path'; -import type { ViteDevServer } from 'vite'; export type AngularMemoryOutputFiles = Map; @@ -32,19 +30,3 @@ export function lookupMimeTypeFromRequest(url: string): string | undefined { return extension && lookupMimeType(extension); } - -export function appendServerConfiguredHeaders( - server: ViteDevServer, - res: ServerResponse, -): void { - const headers = server.config.server.headers; - if (!headers) { - return; - } - - for (const [name, value] of Object.entries(headers)) { - if (value !== undefined) { - res.setHeader(name, value); - } - } -} From 902dbf3a888b9d600c2f9a615a0c454c70d6c3d0 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 12 Sep 2024 11:45:38 +0000 Subject: [PATCH 35/53] refactor(@angular/build): assign name to custom Vite middleware for better debugging Naming the custom middleware improves the ability to identify middleware order during debugging. --- .../build/src/tools/vite/middlewares/assets-middleware.ts | 2 +- .../build/src/tools/vite/middlewares/headers-middleware.ts | 6 +++++- .../src/tools/vite/middlewares/html-fallback-middleware.ts | 2 +- .../src/tools/vite/middlewares/index-html-middleware.ts | 2 +- .../build/src/tools/vite/middlewares/ssr-middleware.ts | 6 +++++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index c77a1f83aa3d..b282831210f9 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -20,7 +20,7 @@ export function createAngularAssetsMiddleware( outputFiles: AngularMemoryOutputFiles, usedComponentStyles: Map, ): Connect.NextHandleFunction { - return function (req, res, next) { + return function angularAssetsMiddleware(req, res, next) { if (req.url === undefined || res.writableEnded) { return; } diff --git a/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts index acc631aee0ed..46d4a88f0543 100644 --- a/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/headers-middleware.ts @@ -20,7 +20,11 @@ import type { Connect, ViteDevServer } from 'vite'; * and passes control to the next middleware in the chain. */ export function createAngularHeadersMiddleware(server: ViteDevServer): Connect.NextHandleFunction { - return function (_req: Connect.IncomingMessage, res: ServerResponse, next: Connect.NextFunction) { + return function angularHeadersMiddleware( + _req: Connect.IncomingMessage, + res: ServerResponse, + next: Connect.NextFunction, + ) { const headers = server.config.server.headers; if (!headers) { return next(); diff --git a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts index 3378404f76d9..2dda2da36a0d 100644 --- a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts @@ -12,7 +12,7 @@ import { lookupMimeTypeFromRequest } from '../utils'; export function angularHtmlFallbackMiddleware( req: Connect.IncomingMessage, - res: ServerResponse, + _res: ServerResponse, next: Connect.NextFunction, ): void { // Similar to how it is handled in vite diff --git a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts index c43ae90d3663..67331ac46250 100644 --- a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts @@ -15,7 +15,7 @@ export function createAngularIndexHtmlMiddleware( outputFiles: AngularMemoryOutputFiles, indexHtmlTransformer: ((content: string) => Promise) | undefined, ): Connect.NextHandleFunction { - return function (req, res, next) { + return function angularIndexHtmlMiddleware(req, res, next) { if (!req.url) { next(); diff --git a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts index e5542cce61ae..98ce95f61a5a 100644 --- a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts @@ -16,7 +16,11 @@ export function createAngularSSRMiddleware( ): Connect.NextHandleFunction { let cachedAngularServerApp: ReturnType | undefined; - return function (req: Connect.IncomingMessage, res: ServerResponse, next: Connect.NextFunction) { + return function angularSSRMiddleware( + req: Connect.IncomingMessage, + res: ServerResponse, + next: Connect.NextFunction, + ) { if (req.url === undefined) { return next(); } From 89e6d2c7f18faa31a74498ee52881c5fdbfab2d3 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 13 Sep 2024 15:17:20 +0000 Subject: [PATCH 36/53] build: update angular --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 42 +-- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/pr.yml | 34 +-- package.json | 8 +- tests/legacy-cli/e2e/ng-snapshot/package.json | 32 +-- yarn.lock | 260 ++++++++---------- 8 files changed, 171 insertions(+), 213 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index ab692e8431ce..e4bda0e76f38 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@c5c42d9aebafe965a8fa85eefd8b4819322f092e + - uses: angular/dev-infra/github-actions/branch-manager@bd7b63896ab21fc258f8f9236165c37e62db27d8 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a67a844e944..c2d644bf8ca1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Generate JSON schema types @@ -42,11 +42,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -56,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -90,13 +90,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} @@ -149,13 +149,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -182,11 +182,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - run: yarn admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index aee2b1017aa4..e9276bfd8be3 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@c5c42d9aebafe965a8fa85eefd8b4819322f092e + - uses: angular/dev-infra/github-actions/commit-message-based-labels@bd7b63896ab21fc258f8f9236165c37e62db27d8 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/post-approval-changes@c5c42d9aebafe965a8fa85eefd8b4819322f092e + - uses: angular/dev-infra/github-actions/post-approval-changes@bd7b63896ab21fc258f8f9236165c37e62db27d8 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index 92c8799df766..f9d5c858e006 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@c5c42d9aebafe965a8fa85eefd8b4819322f092e + - uses: angular/dev-infra/github-actions/feature-request@bd7b63896ab21fc258f8f9236165c37e62db27d8 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9a4a81b15551..f65f1489ede9 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup ESLint Caching uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: @@ -54,7 +54,7 @@ jobs: - name: Run Validation run: yarn admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/linting/licenses@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Check tooling setup run: yarn check-tooling-setup - name: Check commit message @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -90,11 +90,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -155,12 +155,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@c5c42d9aebafe965a8fa85eefd8b4819322f092e + uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/package.json b/package.json index b6fa30efa443..749c3eaa25ff 100644 --- a/package.json +++ b/package.json @@ -54,16 +54,16 @@ "@ampproject/remapping": "2.3.0", "@angular/animations": "19.0.0-next.5", "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239", - "@angular/cdk": "19.0.0-next.3", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929", + "@angular/cdk": "19.0.0-next.4", "@angular/common": "19.0.0-next.5", "@angular/compiler": "19.0.0-next.5", "@angular/compiler-cli": "19.0.0-next.5", "@angular/core": "19.0.0-next.5", "@angular/forms": "19.0.0-next.5", "@angular/localize": "19.0.0-next.5", - "@angular/material": "19.0.0-next.3", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c", + "@angular/material": "19.0.0-next.4", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b", "@angular/platform-browser": "19.0.0-next.5", "@angular/platform-browser-dynamic": "19.0.0-next.5", "@angular/platform-server": "19.0.0-next.5", diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index de1b95680a9a..f41863a3a071 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#caa6747ec30138894bb6191ce91967ec4bb69e4c", - "@angular/cdk": "github:angular/cdk-builds#835d8c9d5a9903eb0beb27dbd139ba6447920e4b", - "@angular/common": "github:angular/common-builds#07d541b6b8d7dbfc874592ffe8e7d814954eb28d", - "@angular/compiler": "github:angular/compiler-builds#d5048f054c34a3ed17675c99c963ba220fb653d0", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#a92d790f27d7ad977dcd105fd0e9ebf4cb082c07", - "@angular/core": "github:angular/core-builds#076811f105c932ec2af0305faadae8126200d0af", - "@angular/forms": "github:angular/forms-builds#bbc5d0c4f92ae405cb0c8660d8498ae733c18b01", - "@angular/language-service": "github:angular/language-service-builds#48971df741a983edfc78d1d21c18ef8f198c0a37", - "@angular/localize": "github:angular/localize-builds#f50d77b34465abf9215f64b9eb12f6e7f3aa2669", - "@angular/material": "github:angular/material-builds#7fee86a9d0fea62deb6ceb4346a036b9d4ad7b76", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#f6dcf6bb5f33d76b15141945b32facb3722dc877", - "@angular/platform-browser": "github:angular/platform-browser-builds#99b704989cc8e91b473310bae378552e90feccad", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#e31a2fb543024c29d7d496fb3b599fc91e5775d8", - "@angular/platform-server": "github:angular/platform-server-builds#a3ae0f6c3ca611294473d2a1685cccfba7a74c52", - "@angular/router": "github:angular/router-builds#a214bd9ffd5ee647a3735faa53eba66f37e9068e", - "@angular/service-worker": "github:angular/service-worker-builds#d74de393f4ab45f69f64d9f55237c6b8b7425324" + "@angular/animations": "github:angular/animations-builds#e8fc0cfa142918f6c175f5bd648477195f2ad141", + "@angular/cdk": "github:angular/cdk-builds#baa15ee38919134c601d13b7fbbebbb13dcfa2c4", + "@angular/common": "github:angular/common-builds#1665f287f4c88ad9e99b2f8b4bf0076a688446da", + "@angular/compiler": "github:angular/compiler-builds#434424bd13b22d91eb31c4b72eed5e12113ec852", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#5cccd48bf518d5339fa5daf1aa563e1bfd0b7e43", + "@angular/core": "github:angular/core-builds#e52a2e54e562a3756aafdc1077922a8344789556", + "@angular/forms": "github:angular/forms-builds#2c5cc8716556c90237f9de24b62a7065355a2fd4", + "@angular/language-service": "github:angular/language-service-builds#944d7f0a9bd220f619cd85ed06ce3117cbcf3ec1", + "@angular/localize": "github:angular/localize-builds#fc1617e3d752e70e9b75b252d17d0ba1f8aa447a", + "@angular/material": "github:angular/material-builds#fe09474fbe1d63be84896cdd7d55af15e744de9b", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#285f82dd88f89faf3483a3008b5ce6aa2d3eef9b", + "@angular/platform-browser": "github:angular/platform-browser-builds#7cb34e9c1d0ac9a6ea8483af74b6a34c6905491e", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6e285bddb3c3098418f7004ec5ae230fad1cc50e", + "@angular/platform-server": "github:angular/platform-server-builds#6cc07caaad27efcec7602ec752f65d0392325c90", + "@angular/router": "github:angular/router-builds#d9636899fbd01efd83bd81f485f6d9430987d624", + "@angular/service-worker": "github:angular/service-worker-builds#42c11a7d2f4ffdd951e4647b86cb03958b4574e5" } } diff --git a/yarn.lock b/yarn.lock index f3ef4187ddd4..62db09f95162 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,18 +40,18 @@ __metadata: languageName: unknown linkType: soft -"@angular-devkit/architect@npm:0.1900.0-next.3": - version: 0.1900.0-next.3 - resolution: "@angular-devkit/architect@npm:0.1900.0-next.3" +"@angular-devkit/architect@npm:0.1900.0-next.6": + version: 0.1900.0-next.6 + resolution: "@angular-devkit/architect@npm:0.1900.0-next.6" dependencies: - "@angular-devkit/core": "npm:19.0.0-next.3" + "@angular-devkit/core": "npm:19.0.0-next.6" rxjs: "npm:7.8.1" dependenciesMeta: esbuild: built: true puppeteer: built: true - checksum: 10c0/b06081936582c27e9cdfa559690401e6396bdb4abb4414e2015a583633b8e6c9af69f054b623b441f97a2bf1fcff538adbc27451b5502fe06d1807cf6b697ebd + checksum: 10c0/c63e5d1981462dde37ad5ea3f4c0abbd754cd8d52a2f3eb3893c4addb02b5c68a5a267a273d54b1142b5fcf8ff7107923112e5cf7fce2698f36cdba3b7453ea0 languageName: node linkType: hard @@ -201,9 +201,9 @@ __metadata: languageName: unknown linkType: soft -"@angular-devkit/core@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular-devkit/core@npm:19.0.0-next.3" +"@angular-devkit/core@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular-devkit/core@npm:19.0.0-next.6" dependencies: ajv: "npm:8.17.1" ajv-formats: "npm:3.0.1" @@ -212,7 +212,7 @@ __metadata: rxjs: "npm:7.8.1" source-map: "npm:0.7.4" peerDependencies: - chokidar: ^3.5.2 + chokidar: ^4.0.0 dependenciesMeta: esbuild: built: true @@ -221,7 +221,7 @@ __metadata: peerDependenciesMeta: chokidar: optional: true - checksum: 10c0/59536de061568b94d5652cd9e297f1a8e7a95deae0a4d78822ec3cfc39149484d755e8730fd67c31eded2f6a14b146b5cec2c02a1f7c45384317f25094ec95d7 + checksum: 10c0/0e485ef595399a6f0fc5588e6a1cb89609a7bfa04eae759690b8a43df5618341ec20e3cd85cd757abfb1b8635590e16440811f8338a256604dfa0fe6bd27e680 languageName: node linkType: hard @@ -331,12 +331,12 @@ __metadata: languageName: node linkType: hard -"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239": - version: 0.0.0-c5c42d9aebafe965a8fa85eefd8b4819322f092e - resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=c3526b58a5154ba4d63622759be2d86081a45239" +"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929": + version: 0.0.0-bd7b63896ab21fc258f8f9236165c37e62db27d8 + resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=40c5080c52f4d14aa2b5083e42fe5cb0fea2f929" dependencies: "@angular/benchpress": "npm:0.3.0" - "@angular/build": "npm:19.0.0-next.3" + "@angular/build": "npm:19.0.0-next.6" "@babel/core": "npm:^7.16.0" "@babel/helper-annotate-as-pure": "npm:^7.18.6" "@babel/plugin-proposal-async-generator-functions": "npm:^7.20.1" @@ -347,7 +347,7 @@ __metadata: "@bazel/runfiles": "npm:5.8.1" "@bazel/terser": "npm:5.8.1" "@bazel/typescript": "npm:5.8.1" - "@microsoft/api-extractor": "npm:7.47.8" + "@microsoft/api-extractor": "npm:7.47.9" "@types/browser-sync": "npm:^2.26.3" "@types/minimatch": "npm:^5.1.2" "@types/node": "npm:^18.19.21" @@ -373,7 +373,7 @@ __metadata: dependenciesMeta: re2: built: false - checksum: 10c0/a7a45c0050b11a4f180884c3c234e8321ed36674643f3da02bc1a087abf877b467a7c9f4e13bf7fc9f37bf1f2d18dc256b9d70ea51df5abfe4d2105026dcc570 + checksum: 10c0/a536524457cefe742af6ccb3492bfe9698d71db10e6ad520dda2ae23685aa4cb98b1f091d37e750e2fe035c95b63b00c59b8235e00998e76fb11eac45be391da languageName: node linkType: hard @@ -435,12 +435,12 @@ __metadata: languageName: unknown linkType: soft -"@angular/build@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/build@npm:19.0.0-next.3" +"@angular/build@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/build@npm:19.0.0-next.6" dependencies: "@ampproject/remapping": "npm:2.3.0" - "@angular-devkit/architect": "npm:0.1900.0-next.3" + "@angular-devkit/architect": "npm:0.1900.0-next.6" "@babel/core": "npm:7.25.2" "@babel/helper-annotate-as-pure": "npm:7.24.7" "@babel/helper-split-export-declaration": "npm:7.24.7" @@ -459,17 +459,18 @@ __metadata: parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" piscina: "npm:4.6.1" - rollup: "npm:4.21.2" + rollup: "npm:4.21.3" sass: "npm:1.78.0" semver: "npm:7.6.3" - vite: "npm:5.4.3" + vite: "npm:5.4.4" watchpack: "npm:2.4.2" peerDependencies: + "@angular/compiler": ^19.0.0-next.0 "@angular/compiler-cli": ^19.0.0-next.0 "@angular/localize": ^19.0.0-next.0 "@angular/platform-server": ^19.0.0-next.0 "@angular/service-worker": ^19.0.0-next.0 - "@angular/ssr": ^19.0.0-next.3 + "@angular/ssr": ^19.0.0-next.6 less: ^4.2.0 postcss: ^8.4.0 tailwindcss: ^2.0.0 || ^3.0.0 @@ -494,13 +495,13 @@ __metadata: optional: true tailwindcss: optional: true - checksum: 10c0/98f9fba58b947a3b58c79350e5a92a86f857135e8753b687343135e03cc72282e4c21735ece03b96964d035b46e239eb94108af031777bf600b2bb86405161ee + checksum: 10c0/0269b2bce2b56f4945205f13d83e3216ae4defafa7db388b27c6135424fbd4f0f44ad3b753b334c8f3a82276e1fde3f124e322fbada19f494f0d89b525d6d017 languageName: node linkType: hard -"@angular/cdk@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/cdk@npm:19.0.0-next.3" +"@angular/cdk@npm:19.0.0-next.4": + version: 19.0.0-next.4 + resolution: "@angular/cdk@npm:19.0.0-next.4" dependencies: parse5: "npm:^7.1.2" tslib: "npm:^2.3.0" @@ -511,7 +512,7 @@ __metadata: dependenciesMeta: parse5: optional: true - checksum: 10c0/50313523af0d3307da21fc4e8db4e121d76dfc6f16c167182c836d42c7dc73caf7579a3e2b975e6be682c3ac9476c26a977c0aa7d8d9ea7a1df04bb78dcc30fc + checksum: 10c0/3e3fb9c45ae7364191d1b233f69eae233fb61dfed9db6714c47d0a3ec37379f1cdea3a55e2994c5db105972e172fa64babc3652706a0d774234333b8bbf5ad08 languageName: node linkType: hard @@ -631,16 +632,16 @@ __metadata: "@ampproject/remapping": "npm:2.3.0" "@angular/animations": "npm:19.0.0-next.5" "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch" - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#c3526b58a5154ba4d63622759be2d86081a45239" - "@angular/cdk": "npm:19.0.0-next.3" + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929" + "@angular/cdk": "npm:19.0.0-next.4" "@angular/common": "npm:19.0.0-next.5" "@angular/compiler": "npm:19.0.0-next.5" "@angular/compiler-cli": "npm:19.0.0-next.5" "@angular/core": "npm:19.0.0-next.5" "@angular/forms": "npm:19.0.0-next.5" "@angular/localize": "npm:19.0.0-next.5" - "@angular/material": "npm:19.0.0-next.3" - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c" + "@angular/material": "npm:19.0.0-next.4" + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b" "@angular/platform-browser": "npm:19.0.0-next.5" "@angular/platform-browser-dynamic": "npm:19.0.0-next.5" "@angular/platform-server": "npm:19.0.0-next.5" @@ -832,26 +833,26 @@ __metadata: languageName: node linkType: hard -"@angular/material@npm:19.0.0-next.3": - version: 19.0.0-next.3 - resolution: "@angular/material@npm:19.0.0-next.3" +"@angular/material@npm:19.0.0-next.4": + version: 19.0.0-next.4 + resolution: "@angular/material@npm:19.0.0-next.4" dependencies: tslib: "npm:^2.3.0" peerDependencies: "@angular/animations": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - "@angular/cdk": 19.0.0-next.3 + "@angular/cdk": 19.0.0-next.4 "@angular/common": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/core": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/forms": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 "@angular/platform-browser": ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/ec785ddbe27ec7bfa6531142e525d71eb933db2ceab0007340fd3eac8c2fc4cdeb602851f0f0e8cf9db4fc11cd462e258b10e369e263b92d427b664a0f3e6b78 + checksum: 10c0/d1a0778f16e6ab418f51395371d7175adc577990e233b34620f5c670127cc1b5ac97bf5eb95c6fc57d5c964c0a8d12dafca942e13484d538fd172cd2eb1c6c94 languageName: node linkType: hard -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#ac7e9c64990cb0a4d1390184734b3e00e1eee41c": - version: 0.0.0-c5c42d9aebafe965a8fa85eefd8b4819322f092e - resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=ac7e9c64990cb0a4d1390184734b3e00e1eee41c" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b": + version: 0.0.0-bd7b63896ab21fc258f8f9236165c37e62db27d8 + resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=682b3d77e51c0c4fcb535bd6b147eb42a8738d7b" dependencies: "@octokit/rest": "npm:21.0.2" "@types/semver": "npm:^7.3.6" @@ -865,7 +866,7 @@ __metadata: yaml: "npm:2.5.1" bin: ng-dev: ./bundles/cli.mjs - checksum: 10c0/c0230774235c5a0f232a7ca8a6edb2bc0baf63ce48ad44b55c6ca94c3bff5bd0b462a1683efee6cf5cec09d7b9407f2847525eb5a3b8943b630e4202d5a42a82 + checksum: 10c0/df04f5e57e967813aa8d925619bdf979230bc405bc4cc9307910fb7335a4020112d8efb91f52941c9dd95d8d5b0a609f7255f6cd645cef11a18e28363b65cfaa languageName: node linkType: hard @@ -3316,28 +3317,28 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.29.7": - version: 7.29.7 - resolution: "@microsoft/api-extractor-model@npm:7.29.7" +"@microsoft/api-extractor-model@npm:7.29.8": + version: 7.29.8 + resolution: "@microsoft/api-extractor-model@npm:7.29.8" dependencies: "@microsoft/tsdoc": "npm:~0.15.0" "@microsoft/tsdoc-config": "npm:~0.17.0" - "@rushstack/node-core-library": "npm:5.8.0" - checksum: 10c0/3ea542dbda0b18854db5570e6160730269c4a03662a73a48402fdd70d7510f56afeb344efa6727137320ed10ac06603ae4985b3ba6cb229984acee9cd132842a + "@rushstack/node-core-library": "npm:5.9.0" + checksum: 10c0/ede1e2267e5b555cf4dd049a9c19d06bf3527f7c4b517afeb112af1a984a7e7bae8e7f5103a7228477f9399907229e2f51d7597df762aaeb71a02bb64cd091d7 languageName: node linkType: hard -"@microsoft/api-extractor@npm:7.47.8": - version: 7.47.8 - resolution: "@microsoft/api-extractor@npm:7.47.8" +"@microsoft/api-extractor@npm:7.47.9": + version: 7.47.9 + resolution: "@microsoft/api-extractor@npm:7.47.9" dependencies: - "@microsoft/api-extractor-model": "npm:7.29.7" + "@microsoft/api-extractor-model": "npm:7.29.8" "@microsoft/tsdoc": "npm:~0.15.0" "@microsoft/tsdoc-config": "npm:~0.17.0" - "@rushstack/node-core-library": "npm:5.8.0" + "@rushstack/node-core-library": "npm:5.9.0" "@rushstack/rig-package": "npm:0.5.3" - "@rushstack/terminal": "npm:0.14.1" - "@rushstack/ts-command-line": "npm:4.22.7" + "@rushstack/terminal": "npm:0.14.2" + "@rushstack/ts-command-line": "npm:4.22.8" lodash: "npm:~4.17.15" minimatch: "npm:~3.0.3" resolve: "npm:~1.22.1" @@ -3346,7 +3347,7 @@ __metadata: typescript: "npm:5.4.2" bin: api-extractor: bin/api-extractor - checksum: 10c0/e64bb9583f7109fbd39291544ccc685fc805121a15e08089dae75bf3bccc4a9744a153ec77c0dee61fe0d3a082ffa0cabf2c96761968ddb78018f94d4e01616b + checksum: 10c0/7543f2b1683d2eaa42bd8f97d40d53034556f425f27e33aa5f358bace270effcbe37715a691899794d56157b8900c5ab43cd725c0fe95cee60beef7ef29c49b3 languageName: node linkType: hard @@ -4267,9 +4268,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:5.8.0": - version: 5.8.0 - resolution: "@rushstack/node-core-library@npm:5.8.0" +"@rushstack/node-core-library@npm:5.9.0": + version: 5.9.0 + resolution: "@rushstack/node-core-library@npm:5.9.0" dependencies: ajv: "npm:~8.13.0" ajv-draft-04: "npm:~1.0.0" @@ -4284,7 +4285,7 @@ __metadata: peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/a8b8e5c04ec160a8036435d70441c9caa2698af80f0f39b14e927e29a6bb67d682a892bc74e8133f7bf5821ed482b3139209acd650103bea078f7f69c5a8994a + checksum: 10c0/1322a05f504da2aaa869821aa53f5d2867e02f19ed2ef2692e6fc04507b6419b2c7b0a2f756bed09477b1a6b5edc8f8f86471b24d0c81ff51653da87ae1cb8af languageName: node linkType: hard @@ -4313,18 +4314,18 @@ __metadata: languageName: node linkType: hard -"@rushstack/terminal@npm:0.14.1": - version: 0.14.1 - resolution: "@rushstack/terminal@npm:0.14.1" +"@rushstack/terminal@npm:0.14.2": + version: 0.14.2 + resolution: "@rushstack/terminal@npm:0.14.2" dependencies: - "@rushstack/node-core-library": "npm:5.8.0" + "@rushstack/node-core-library": "npm:5.9.0" supports-color: "npm:~8.1.1" peerDependencies: "@types/node": "*" peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/7cd86c3d9e826101951ec8553a95cd654acf79e7bc66095717cc3cb2e5508194aecec68a12bfa4616b08db6ea5e2102fde6321b1a6d3bd95dd9457156feadd78 + checksum: 10c0/3329c407e4a23ae6b1e0e35eeeaf27e9ea190454bca58473e745b9eb5c15d1ca43f99c42aa34f673ce5421bbec90052ebd037c0d080973b3e878688cf02d5b37 languageName: node linkType: hard @@ -4340,15 +4341,15 @@ __metadata: languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.22.7": - version: 4.22.7 - resolution: "@rushstack/ts-command-line@npm:4.22.7" +"@rushstack/ts-command-line@npm:4.22.8": + version: 4.22.8 + resolution: "@rushstack/ts-command-line@npm:4.22.8" dependencies: - "@rushstack/terminal": "npm:0.14.1" + "@rushstack/terminal": "npm:0.14.2" "@types/argparse": "npm:1.0.38" argparse: "npm:~1.0.9" string-argv: "npm:~0.3.1" - checksum: 10c0/6142db8ccf2f40ab87f763751726ae517b9a89eee6b3889f70f059ea2dd55d0d1892f899860099cf7777b2253f55c9652d4a9e9d0c82028b5fa13bce1b10de4c + checksum: 10c0/c2bf9983427f7f85b8773c4fbf1ac1817b930131ea175cd29e8b84c3b98df49b26223e6e7363d9bdcf694d9996714e63c2a5877d916bc24be70b74c076e77ee9 languageName: node linkType: hard @@ -15369,26 +15370,26 @@ __metadata: languageName: node linkType: hard -"rollup@npm:4.21.2, rollup@npm:^4.18.0, rollup@npm:^4.20.0, rollup@npm:^4.4.0": - version: 4.21.2 - resolution: "rollup@npm:4.21.2" +"rollup@npm:4.21.3": + version: 4.21.3 + resolution: "rollup@npm:4.21.3" dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.2" - "@rollup/rollup-android-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-x64": "npm:4.21.2" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-musl": "npm:4.21.2" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" + "@rollup/rollup-android-arm-eabi": "npm:4.21.3" + "@rollup/rollup-android-arm64": "npm:4.21.3" + "@rollup/rollup-darwin-arm64": "npm:4.21.3" + "@rollup/rollup-darwin-x64": "npm:4.21.3" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.3" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.3" + "@rollup/rollup-linux-arm64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-arm64-musl": "npm:4.21.3" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.3" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-s390x-gnu": "npm:4.21.3" + "@rollup/rollup-linux-x64-gnu": "npm:4.21.3" + "@rollup/rollup-linux-x64-musl": "npm:4.21.3" + "@rollup/rollup-win32-arm64-msvc": "npm:4.21.3" + "@rollup/rollup-win32-ia32-msvc": "npm:4.21.3" + "@rollup/rollup-win32-x64-msvc": "npm:4.21.3" "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -15428,30 +15429,30 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/c9d97f7a21cde110371b2e890a31a996fee09b81e639e79372b962a9638ae653d2d24186b94632fc5dfab8a0582e1d0639dfe34b8b75051facd86915a9585a5f + checksum: 10c0/a9f98366a451f1302276390de9c0c59b464d680946410f53c14e7057fa84642efbe05eca8d85076962657955d77bb4a2d2b6dd8b70baf58c3c4b56f565d804dd languageName: node linkType: hard -"rollup@npm:4.21.3": - version: 4.21.3 - resolution: "rollup@npm:4.21.3" +"rollup@npm:^4.18.0, rollup@npm:^4.20.0, rollup@npm:^4.4.0": + version: 4.21.2 + resolution: "rollup@npm:4.21.2" dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.3" - "@rollup/rollup-android-arm64": "npm:4.21.3" - "@rollup/rollup-darwin-arm64": "npm:4.21.3" - "@rollup/rollup-darwin-x64": "npm:4.21.3" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.3" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.3" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.3" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.3" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.3" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.3" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.3" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.3" - "@rollup/rollup-linux-x64-musl": "npm:4.21.3" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.3" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.3" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.3" + "@rollup/rollup-android-arm-eabi": "npm:4.21.2" + "@rollup/rollup-android-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-x64": "npm:4.21.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-musl": "npm:4.21.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -15491,7 +15492,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/a9f98366a451f1302276390de9c0c59b464d680946410f53c14e7057fa84642efbe05eca8d85076962657955d77bb4a2d2b6dd8b70baf58c3c4b56f565d804dd + checksum: 10c0/c9d97f7a21cde110371b2e890a31a996fee09b81e639e79372b962a9638ae653d2d24186b94632fc5dfab8a0582e1d0639dfe34b8b75051facd86915a9585a5f languageName: node linkType: hard @@ -17726,49 +17727,6 @@ __metadata: languageName: node linkType: hard -"vite@npm:5.4.3": - version: 5.4.3 - resolution: "vite@npm:5.4.3" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/7afe601bcba82f81980c718fc171ba8f0c45e3bffaeb7ef831b64b84e396f963c3c87818b74da4c8e817d1bce1c179f1efae3bcb14d2e94b4eb635071722c8f2 - languageName: node - linkType: hard - "vite@npm:5.4.4": version: 5.4.4 resolution: "vite@npm:5.4.4" From c9324e7ee8aeb7b9ee0b4fd1afdf98fa345e31e8 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Sun, 15 Sep 2024 23:11:27 +0000 Subject: [PATCH 37/53] build: update all non-major dependencies --- package.json | 8 +- packages/angular/build/package.json | 4 +- .../angular_devkit/build_angular/package.json | 4 +- yarn.lock | 507 +++++++++++------- 4 files changed, 327 insertions(+), 196 deletions(-) diff --git a/package.json b/package.json index 749c3eaa25ff..adf4f60ec5a3 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", "listr2": "8.2.4", - "lmdb": "3.1.0", + "lmdb": "3.1.1", "loader-utils": "3.3.1", "lodash": "^4.17.21", "magic-string": "0.30.11", @@ -176,7 +176,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "postcss": "8.4.45", + "postcss": "8.4.47", "postcss-loader": "8.1.1", "prettier": "^3.0.0", "protractor": "~7.0.0", @@ -202,9 +202,9 @@ "typescript": "5.6.2", "undici": "6.19.8", "unenv": "^1.10.0", - "verdaccio": "5.32.1", + "verdaccio": "5.32.2", "verdaccio-auth-memory": "^10.0.0", - "vite": "5.4.4", + "vite": "5.4.5", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 30faea5c5a4d..95c83b797ae8 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -32,7 +32,7 @@ "fast-glob": "3.3.2", "https-proxy-agent": "7.0.5", "listr2": "8.2.4", - "lmdb": "3.1.0", + "lmdb": "3.1.1", "magic-string": "0.30.11", "mrmime": "2.0.0", "parse5-html-rewriting-stream": "7.0.0", @@ -41,7 +41,7 @@ "rollup": "4.21.3", "sass": "1.78.0", "semver": "7.6.3", - "vite": "5.4.4", + "vite": "5.4.5", "watchpack": "2.4.2" }, "peerDependencies": { diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index cb462eedacab..da3cd8dec434 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -49,7 +49,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "postcss": "8.4.45", + "postcss": "8.4.47", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", @@ -61,7 +61,7 @@ "terser": "5.32.0", "tree-kill": "1.2.2", "tslib": "2.7.0", - "vite": "5.4.4", + "vite": "5.4.5", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/yarn.lock b/yarn.lock index 62db09f95162..e869a6df21e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -103,7 +103,7 @@ __metadata: parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" piscina: "npm:4.6.1" - postcss: "npm:8.4.45" + postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" resolve-url-loader: "npm:5.0.0" rxjs: "npm:7.8.1" @@ -116,7 +116,7 @@ __metadata: tree-kill: "npm:1.2.2" tslib: "npm:2.7.0" undici: "npm:6.19.8" - vite: "npm:5.4.4" + vite: "npm:5.4.5" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -395,7 +395,7 @@ __metadata: fast-glob: "npm:3.3.2" https-proxy-agent: "npm:7.0.5" listr2: "npm:8.2.4" - lmdb: "npm:3.1.0" + lmdb: "npm:3.1.1" magic-string: "npm:0.30.11" mrmime: "npm:2.0.0" parse5-html-rewriting-stream: "npm:7.0.0" @@ -404,7 +404,7 @@ __metadata: rollup: "npm:4.21.3" sass: "npm:1.78.0" semver: "npm:7.6.3" - vite: "npm:5.4.4" + vite: "npm:5.4.5" watchpack: "npm:2.4.2" peerDependencies: "@angular/compiler": ^19.0.0-next.0 @@ -738,7 +738,7 @@ __metadata: less-loader: "npm:12.2.0" license-webpack-plugin: "npm:4.0.2" listr2: "npm:8.2.4" - lmdb: "npm:3.1.0" + lmdb: "npm:3.1.1" loader-utils: "npm:3.3.1" lodash: "npm:^4.17.21" magic-string: "npm:0.30.11" @@ -754,7 +754,7 @@ __metadata: parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" piscina: "npm:4.6.1" - postcss: "npm:8.4.45" + postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" prettier: "npm:^3.0.0" protractor: "npm:~7.0.0" @@ -780,9 +780,9 @@ __metadata: typescript: "npm:5.6.2" undici: "npm:6.19.8" unenv: "npm:^1.10.0" - verdaccio: "npm:5.32.1" + verdaccio: "npm:5.32.2" verdaccio-auth-memory: "npm:^10.0.0" - vite: "npm:5.4.4" + vite: "npm:5.4.5" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -3271,6 +3271,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-darwin-arm64@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-darwin-arm64@npm:3.1.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@lmdb/lmdb-darwin-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-darwin-x64@npm:3.1.0" @@ -3278,6 +3285,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-darwin-x64@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-darwin-x64@npm:3.1.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@lmdb/lmdb-linux-arm64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-arm64@npm:3.1.0" @@ -3285,6 +3299,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-linux-arm64@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-linux-arm64@npm:3.1.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@lmdb/lmdb-linux-arm@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-arm@npm:3.1.0" @@ -3292,6 +3313,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-linux-arm@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-linux-arm@npm:3.1.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@lmdb/lmdb-linux-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-linux-x64@npm:3.1.0" @@ -3299,6 +3327,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-linux-x64@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-linux-x64@npm:3.1.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@lmdb/lmdb-win32-x64@npm:3.1.0": version: 3.1.0 resolution: "@lmdb/lmdb-win32-x64@npm:3.1.0" @@ -3306,6 +3341,13 @@ __metadata: languageName: node linkType: hard +"@lmdb/lmdb-win32-x64@npm:3.1.1": + version: 3.1.1 + resolution: "@lmdb/lmdb-win32-x64@npm:3.1.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@microsoft/api-extractor-model@npm:7.29.6": version: 7.29.6 resolution: "@microsoft/api-extractor-model@npm:7.29.6" @@ -5443,20 +5485,20 @@ __metadata: languageName: node linkType: hard -"@verdaccio/auth@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/auth@npm:7.0.0-next-7.20" +"@verdaccio/auth@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/auth@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/config": "npm:7.0.0-next-7.20" - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/loaders": "npm:7.0.0-next-7.20" - "@verdaccio/logger": "npm:7.0.0-next-7.20" - "@verdaccio/signature": "npm:7.0.0-next-7.5" - "@verdaccio/utils": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" + "@verdaccio/config": "npm:8.0.0-next-8.1" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/loaders": "npm:8.0.0-next-8.1" + "@verdaccio/logger": "npm:8.0.0-next-8.1" + "@verdaccio/signature": "npm:8.0.0-next-8.0" + "@verdaccio/utils": "npm:7.0.1-next-8.1" + debug: "npm:4.3.7" lodash: "npm:4.17.21" - verdaccio-htpasswd: "npm:12.0.0-next-7.20" - checksum: 10c0/bc36ad33f304c2a4768f6515da7bbf8bae5724734b503249a65adad5f3bed571a981b89af2ce49c91493c5c73f861cebacd3e111ded02bd538c1724f705a0e50 + verdaccio-htpasswd: "npm:13.0.0-next-8.1" + checksum: 10c0/d77549b8b27f07388028be7e0f380c33a80ed9c4b0cd9188230bd44ac2f7d18dc7d01e98ae47e36030e66d56c3a0c21728e573df32d4693591aac418ca7b2308 languageName: node linkType: hard @@ -5470,31 +5512,31 @@ __metadata: languageName: node linkType: hard -"@verdaccio/config@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/config@npm:7.0.0-next-7.20" +"@verdaccio/config@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/config@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/utils": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/utils": "npm:7.0.1-next-8.1" + debug: "npm:4.3.7" js-yaml: "npm:4.1.0" lodash: "npm:4.17.21" minimatch: "npm:7.4.6" - checksum: 10c0/65286dca84b4f8b1a5c9179838a0115b70cd03b1af95039ce21ccccabd46210b846c1a3576e111e659e9b49e912c87e49079151b9834260ded3745fdad688f14 + checksum: 10c0/571c7187594cf78b997fb28fa4adbcebbd77391528754d769cc075c2bced9e9b40f53c5cf9f3a5bd21290d47b09423ccde87e74a7b3865b1932b3b520d95495b languageName: node linkType: hard -"@verdaccio/core@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/core@npm:7.0.0-next-7.20" +"@verdaccio/core@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/core@npm:8.0.0-next-8.1" dependencies: - ajv: "npm:8.12.0" - core-js: "npm:3.35.0" + ajv: "npm:8.17.1" + core-js: "npm:3.37.1" http-errors: "npm:2.0.0" http-status-codes: "npm:2.3.0" process-warning: "npm:1.0.0" semver: "npm:7.6.3" - checksum: 10c0/61d09c6176e99038dbddfaaed55a5e353bd17c147089f515108d8ae78a9579c8d11c48ae0a67854f0b001f61548330162d6cc9ff6f6e722b23eedc3db06889fd + checksum: 10c0/7fd8985fd31335af7495239664c1aef843b3299824466384d8ee9eaeee430862a066d498662d5f38772a56dec4d5c4c862901996da0be753987d42d84b29b0b4 languageName: node linkType: hard @@ -5507,23 +5549,23 @@ __metadata: languageName: node linkType: hard -"@verdaccio/file-locking@npm:12.0.0-next.1": - version: 12.0.0-next.1 - resolution: "@verdaccio/file-locking@npm:12.0.0-next.1" +"@verdaccio/file-locking@npm:13.0.0-next-8.0": + version: 13.0.0-next-8.0 + resolution: "@verdaccio/file-locking@npm:13.0.0-next-8.0" dependencies: lockfile: "npm:1.0.4" - checksum: 10c0/dfa2576c650264f236c45e8edeb7185014c59dd7747c36c40bbf38149b503915983a9813923cef5f93b5e0841b9ae73e5f50a7a4339916b2aab30d0553cb1694 + checksum: 10c0/c162a43f88796ff535da4752c3f6c7f42821dd406dfd159911a6b701e23b791e08f04acb082e32e33f084844d4a0bd1551d7e39f83641b87033eb86c81bec4ac languageName: node linkType: hard -"@verdaccio/loaders@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/loaders@npm:7.0.0-next-7.20" +"@verdaccio/loaders@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/loaders@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/logger": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" + "@verdaccio/logger": "npm:8.0.0-next-8.1" + debug: "npm:4.3.7" lodash: "npm:4.17.21" - checksum: 10c0/f9877f279873186b112ff0559803fd15fb821cfe764f76ae61a490fbc073cc15137f6ad8bbc9c22496a0b1247932a6bce18f146e9688658248f40b5d145c0dea + checksum: 10c0/87e1bdeefba777ff431743b6db748061eade43bd767cf21acd14d97724f31c6cf519c153e127ef58ce83366ed7168f323ae96e26a051688b1c1187554f68eae3 languageName: node linkType: hard @@ -5543,83 +5585,83 @@ __metadata: languageName: node linkType: hard -"@verdaccio/logger-7@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/logger-7@npm:7.0.0-next-7.20" +"@verdaccio/logger-7@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/logger-7@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/logger-commons": "npm:7.0.0-next-7.20" + "@verdaccio/logger-commons": "npm:8.0.0-next-8.1" pino: "npm:7.11.0" - checksum: 10c0/1d4f661df482cf9aff4623ef7927571f9088ce4c162d2d7bf81fef19e492c4947c22206d781165d61e87ffd95cf0a7122e0c5bcecac434ade0bbfcb033be78b9 + checksum: 10c0/a97b91d52221051697e9c66f29b13b424b9735015f6551ed7789e9c8f861059645368716541c7c453d4b042c99b96503925294354fa956b01328e695ebac9861 languageName: node linkType: hard -"@verdaccio/logger-commons@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/logger-commons@npm:7.0.0-next-7.20" +"@verdaccio/logger-commons@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/logger-commons@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/logger-prettify": "npm:7.0.0-next-7.3" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/logger-prettify": "npm:8.0.0-next-8.0" colorette: "npm:2.0.20" - debug: "npm:4.3.4" - checksum: 10c0/11d989365ee316211ddca3e79450b0ce267e45197b308305d48740e376532a73032ef23f02ff9efe77da0889a100019aa8fed3d1572a2bce07fbdf71ac267ad5 + debug: "npm:4.3.7" + checksum: 10c0/f71c8191d3ef7799c23d57fd3945e1c90ca4e0b381b8d79fe37fee1a1d064c1ab89b25013eb101d06d51537926aee199f6caab06b2da0e0f24267c5bf13bc7d8 languageName: node linkType: hard -"@verdaccio/logger-prettify@npm:7.0.0-next-7.3": - version: 7.0.0-next-7.3 - resolution: "@verdaccio/logger-prettify@npm:7.0.0-next-7.3" +"@verdaccio/logger-prettify@npm:8.0.0-next-8.0": + version: 8.0.0-next-8.0 + resolution: "@verdaccio/logger-prettify@npm:8.0.0-next-8.0" dependencies: colorette: "npm:2.0.20" - dayjs: "npm:1.11.10" + dayjs: "npm:1.11.13" lodash: "npm:4.17.21" pino-abstract-transport: "npm:1.1.0" sonic-boom: "npm:3.8.0" - checksum: 10c0/d8f75dfb8f7536a5176722eae4871bdbc375999ce7357da6f875803f1a30923260fb12f8ece03f9e001acb85c0170d6b26877fb00b70ff4c87b3f50654055449 + checksum: 10c0/77d135c9291c7e78f4c66df1bb00df33180dbc3e1a59f7287fbe3b9caeef3abee38e1ebc0262d36a409f7b7c2e168544fb919b2276cc62758c08081aec86e670 languageName: node linkType: hard -"@verdaccio/logger@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/logger@npm:7.0.0-next-7.20" +"@verdaccio/logger@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/logger@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/logger-commons": "npm:7.0.0-next-7.20" + "@verdaccio/logger-commons": "npm:8.0.0-next-8.1" pino: "npm:8.17.2" - checksum: 10c0/5eef82a6856284d4739ea32e834289c42b1ee895b2744a682d5eaa31b6934afef7d0d0e5d2d8721c894f81b6a776fd62b4c07016392a68afc9574a62c8103d08 + checksum: 10c0/0bfe94413b133594cb7674f066b6b39ab394d379bc4808eee487e0e204950f3883f375b72e2126fbb3a4e64bdc4bb21b62784bea4da8c2a7fe15c0aefa164e07 languageName: node linkType: hard -"@verdaccio/middleware@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/middleware@npm:7.0.0-next-7.20" +"@verdaccio/middleware@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/middleware@npm:8.0.0-next-8.1" dependencies: - "@verdaccio/config": "npm:7.0.0-next-7.20" - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/url": "npm:12.0.0-next-7.20" - "@verdaccio/utils": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" - express: "npm:4.19.2" + "@verdaccio/config": "npm:8.0.0-next-8.1" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/url": "npm:13.0.0-next-8.1" + "@verdaccio/utils": "npm:7.0.1-next-8.1" + debug: "npm:4.3.7" + express: "npm:4.21.0" express-rate-limit: "npm:5.5.1" lodash: "npm:4.17.21" lru-cache: "npm:7.18.3" mime: "npm:2.6.0" - checksum: 10c0/bf8ce794a9387f0498ddac4d62c5b43d079b7d499dfe1d04cece83171f41c07ed9c57fc63cde5c1921a81be176720473f3350637152116b648afc75e85b3d7a8 + checksum: 10c0/644e51c12114659f3efe634784af11f61ddde649a7118b026e588824cbe505d23b931e4af819e9570c0d0413cfe479230ba5430e67225c4d083c1c4276e374f4 languageName: node linkType: hard -"@verdaccio/search-indexer@npm:7.0.0-next-7.2": - version: 7.0.0-next-7.2 - resolution: "@verdaccio/search-indexer@npm:7.0.0-next-7.2" - checksum: 10c0/9eb65f6173eb017c521a2fe2120b01d386e28b0db14f862d00c4579d2d32906da48b89a4b5b1175336b068076f7df6903f2a456a07884c1eaad332c5f00d8edb +"@verdaccio/search-indexer@npm:8.0.0-next-8.0": + version: 8.0.0-next-8.0 + resolution: "@verdaccio/search-indexer@npm:8.0.0-next-8.0" + checksum: 10c0/b010a05e455d13fa5d7951c8ec050f5894822a712186bb5d0eff6b2e09b3804c9417f6482cece13910fd3643602143e7f792984ba70bc108265b8b19c2154627 languageName: node linkType: hard -"@verdaccio/signature@npm:7.0.0-next-7.5": - version: 7.0.0-next-7.5 - resolution: "@verdaccio/signature@npm:7.0.0-next-7.5" +"@verdaccio/signature@npm:8.0.0-next-8.0": + version: 8.0.0-next-8.0 + resolution: "@verdaccio/signature@npm:8.0.0-next-8.0" dependencies: - debug: "npm:4.3.4" + debug: "npm:4.3.7" jsonwebtoken: "npm:9.0.2" - checksum: 10c0/cf4c922cbddf4d5b34568f68c2dab80b785aac7116be1331a23cd96459843031787f718bab8330d49b9848685d0d832c23cbbed6d1553c57b770a981a98aab5f + checksum: 10c0/99223bcd6b8e0e8fa2262e60468b3472f26ff63831245df52e8f0d76c197ed70fcc1c58aee16f4faa869c0a93f2b3c818562a9689e6cf6738c0cac8d2c144448 languageName: node linkType: hard @@ -5630,49 +5672,49 @@ __metadata: languageName: node linkType: hard -"@verdaccio/tarball@npm:12.0.0-next-7.20": - version: 12.0.0-next-7.20 - resolution: "@verdaccio/tarball@npm:12.0.0-next-7.20" +"@verdaccio/tarball@npm:13.0.0-next-8.1": + version: 13.0.0-next-8.1 + resolution: "@verdaccio/tarball@npm:13.0.0-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/url": "npm:12.0.0-next-7.20" - "@verdaccio/utils": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/url": "npm:13.0.0-next-8.1" + "@verdaccio/utils": "npm:7.0.1-next-8.1" + debug: "npm:4.3.7" gunzip-maybe: "npm:^1.4.2" lodash: "npm:4.17.21" tar-stream: "npm:^3.1.7" - checksum: 10c0/7ebff227f83149e6b74eff62e26dd28aafd5376ddf0d8e868bf65504f67b2617ea511ea7d27838fd859537f69a335bea93a3e2dc6124da18aa01349ad3b6350e + checksum: 10c0/f7bf054cb63fa408a385c2e2af5e8e4ac7b7159a84cb10a847fe26124a8ba2e05394168a5a3efa873e842093c1c7c573f685549cff9217213d022e8f638fbcbb languageName: node linkType: hard -"@verdaccio/ui-theme@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/ui-theme@npm:7.0.0-next-7.20" - checksum: 10c0/08d673d3c3423f4a61fa7b9a0e195ab6ee240e739ff9ca68319c68730acf336b5a2ceb2133d7cc0414754ef1326133f3eeb87294b815313ff89fe4c93d844cbf +"@verdaccio/ui-theme@npm:8.0.0-next-8.1": + version: 8.0.0-next-8.1 + resolution: "@verdaccio/ui-theme@npm:8.0.0-next-8.1" + checksum: 10c0/93801a78a9a875108d86e2b2d45f88754b19daa15e9fec3bc409886684b196ce33b03f2c9bf5591fd1a72ab9f60484ffb3b8887e63632d87f0731cd7fde24494 languageName: node linkType: hard -"@verdaccio/url@npm:12.0.0-next-7.20": - version: 12.0.0-next-7.20 - resolution: "@verdaccio/url@npm:12.0.0-next-7.20" +"@verdaccio/url@npm:13.0.0-next-8.1": + version: 13.0.0-next-8.1 + resolution: "@verdaccio/url@npm:13.0.0-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" - debug: "npm:4.3.4" + "@verdaccio/core": "npm:8.0.0-next-8.1" + debug: "npm:4.3.7" lodash: "npm:4.17.21" validator: "npm:13.12.0" - checksum: 10c0/5fec8576e79ef3c92bb71ec45e449fa5d66489f5efb128290eeacc2307122995cda5bc4b047be14857688b71dcf2ee107f64aa101046e7a04deade17016dacc6 + checksum: 10c0/a7a0ff6cece76e5d96450ad27c3e39bad01f2d5056c92f758de51545caadd5134244db4a80424829c37e48156b075476696f13e8bad809fd3aab6a22aff7e563 languageName: node linkType: hard -"@verdaccio/utils@npm:7.0.0-next-7.20": - version: 7.0.0-next-7.20 - resolution: "@verdaccio/utils@npm:7.0.0-next-7.20" +"@verdaccio/utils@npm:7.0.1-next-8.1": + version: 7.0.1-next-8.1 + resolution: "@verdaccio/utils@npm:7.0.1-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" + "@verdaccio/core": "npm:8.0.0-next-8.1" lodash: "npm:4.17.21" minimatch: "npm:7.4.6" semver: "npm:7.6.3" - checksum: 10c0/9e1b7ecd5c04c40eb456a39edd2e6a73668808e64673bc3af34f1e81259efae426e6fc8d2f7a657f6d3bce4a74c318f517666aa81282a656d88d7c2369ef805a + checksum: 10c0/711c527ee97c74fac99bb76a4670a2bc02546ab5e973c4d9e313eab17fea958aea696a3e925b31d3c38a383922a2c2450251dd815792958489a3e5c632831bc2 languageName: node linkType: hard @@ -6249,18 +6291,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:8.12.0, ajv@npm:~8.12.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" - dependencies: - fast-deep-equal: "npm:^3.1.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.2.2" - checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e - languageName: node - linkType: hard - "ajv@npm:8.17.1, ajv@npm:^8.0.0, ajv@npm:^8.12.0, ajv@npm:^8.9.0": version: 8.17.1 resolution: "ajv@npm:8.17.1" @@ -6285,6 +6315,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:~8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + "ajv@npm:~8.13.0": version: 8.13.0 resolution: "ajv@npm:8.13.0" @@ -7871,10 +7913,10 @@ __metadata: languageName: node linkType: hard -"core-js@npm:3.35.0": - version: 3.35.0 - resolution: "core-js@npm:3.35.0" - checksum: 10c0/1d545ff4406f2afa5e681f44b45ed5f7f119d158b380234d5aa7787ce7e47fc7a635b98b74c28c766ba8191e3db8c2316ad6ab4ff1ddecbc3fd618413a52c29c +"core-js@npm:3.37.1": + version: 3.37.1 + resolution: "core-js@npm:3.37.1" + checksum: 10c0/440eb51a7a39128a320225fe349f870a3641b96c9ecd26470227db730ef8c161ea298eaea621db66ec0ff622a85299efb4e23afebf889c0a1748616102307675 languageName: node linkType: hard @@ -8093,10 +8135,10 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:1.11.10": - version: 1.11.10 - resolution: "dayjs@npm:1.11.10" - checksum: 10c0/4de9af50639d47df87f2e15fa36bb07e0f9ed1e9c52c6caa1482788ee9a384d668f1dbd00c54f82aaab163db07d61d2899384b8254da3a9184fc6deca080e2fe +"dayjs@npm:1.11.13": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 languageName: node linkType: hard @@ -8116,7 +8158,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": +"debug@npm:4, debug@npm:4.3.7, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -9413,81 +9455,81 @@ __metadata: languageName: node linkType: hard -"express@npm:4.19.2, express@npm:^4.19.2": - version: 4.19.2 - resolution: "express@npm:4.19.2" +"express@npm:4.21.0": + version: 4.21.0 + resolution: "express@npm:4.21.0" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.2" + body-parser: "npm:1.20.3" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" cookie: "npm:0.6.0" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" + finalhandler: "npm:1.3.1" fresh: "npm:0.5.2" http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.1" + merge-descriptors: "npm:1.0.3" methods: "npm:~1.1.2" on-finished: "npm:2.4.1" parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.7" + path-to-regexp: "npm:0.1.10" proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" + qs: "npm:6.13.0" range-parser: "npm:~1.2.1" safe-buffer: "npm:5.2.1" - send: "npm:0.18.0" - serve-static: "npm:1.15.0" + send: "npm:0.19.0" + serve-static: "npm:1.16.2" setprototypeof: "npm:1.2.0" statuses: "npm:2.0.1" type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb + checksum: 10c0/4cf7ca328f3fdeb720f30ccb2ea7708bfa7d345f9cc460b64a82bf1b2c91e5b5852ba15a9a11b2a165d6089acf83457fc477dc904d59cd71ed34c7a91762c6cc languageName: node linkType: hard -"express@npm:4.21.0": - version: 4.21.0 - resolution: "express@npm:4.21.0" +"express@npm:^4.19.2": + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.3" + body-parser: "npm:1.20.2" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" cookie: "npm:0.6.0" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" - encodeurl: "npm:~2.0.0" + encodeurl: "npm:~1.0.2" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - finalhandler: "npm:1.3.1" + finalhandler: "npm:1.2.0" fresh: "npm:0.5.2" http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.3" + merge-descriptors: "npm:1.0.1" methods: "npm:~1.1.2" on-finished: "npm:2.4.1" parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.10" + path-to-regexp: "npm:0.1.7" proxy-addr: "npm:~2.0.7" - qs: "npm:6.13.0" + qs: "npm:6.11.0" range-parser: "npm:~1.2.1" safe-buffer: "npm:5.2.1" - send: "npm:0.19.0" - serve-static: "npm:1.16.2" + send: "npm:0.18.0" + serve-static: "npm:1.15.0" setprototypeof: "npm:1.2.0" statuses: "npm:2.0.1" type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/4cf7ca328f3fdeb720f30ccb2ea7708bfa7d345f9cc460b64a82bf1b2c91e5b5852ba15a9a11b2a165d6089acf83457fc477dc904d59cd71ed34c7a91762c6cc + checksum: 10c0/e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb languageName: node linkType: hard @@ -12380,6 +12422,41 @@ __metadata: languageName: node linkType: hard +"lmdb@npm:3.1.1": + version: 3.1.1 + resolution: "lmdb@npm:3.1.1" + dependencies: + "@lmdb/lmdb-darwin-arm64": "npm:3.1.1" + "@lmdb/lmdb-darwin-x64": "npm:3.1.1" + "@lmdb/lmdb-linux-arm": "npm:3.1.1" + "@lmdb/lmdb-linux-arm64": "npm:3.1.1" + "@lmdb/lmdb-linux-x64": "npm:3.1.1" + "@lmdb/lmdb-win32-x64": "npm:3.1.1" + msgpackr: "npm:^1.10.2" + node-addon-api: "npm:^6.1.0" + node-gyp: "npm:latest" + node-gyp-build-optional-packages: "npm:5.2.2" + ordered-binary: "npm:^1.4.1" + weak-lru-cache: "npm:^1.2.2" + dependenciesMeta: + "@lmdb/lmdb-darwin-arm64": + optional: true + "@lmdb/lmdb-darwin-x64": + optional: true + "@lmdb/lmdb-linux-arm": + optional: true + "@lmdb/lmdb-linux-arm64": + optional: true + "@lmdb/lmdb-linux-x64": + optional: true + "@lmdb/lmdb-win32-x64": + optional: true + bin: + download-lmdb-prebuilds: bin/download-prebuilds.js + checksum: 10c0/35c1f14b0f7bac0a6dcb1b943d95500c749ff0e89464aef37d1a27afe882a12ec3feacfb141722bce6a69f335c57d2dd56c5b2204b882d4b94dfac89dbb89655 + languageName: node + linkType: hard + "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" @@ -14219,7 +14296,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": version: 1.1.0 resolution: "picocolors@npm:1.1.0" checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 @@ -14513,7 +14590,18 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.45, postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.43": +"postcss@npm:8.4.47": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 + languageName: node + linkType: hard + +"postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.43": version: 8.4.45 resolution: "postcss@npm:8.4.45" dependencies: @@ -16172,7 +16260,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf @@ -17630,16 +17718,16 @@ __metadata: languageName: node linkType: hard -"verdaccio-audit@npm:12.0.0-next-7.20": - version: 12.0.0-next-7.20 - resolution: "verdaccio-audit@npm:12.0.0-next-7.20" +"verdaccio-audit@npm:13.0.0-next-8.1": + version: 13.0.0-next-8.1 + resolution: "verdaccio-audit@npm:13.0.0-next-8.1" dependencies: - "@verdaccio/config": "npm:7.0.0-next-7.20" - "@verdaccio/core": "npm:7.0.0-next-7.20" - express: "npm:4.19.2" + "@verdaccio/config": "npm:8.0.0-next-8.1" + "@verdaccio/core": "npm:8.0.0-next-8.1" + express: "npm:4.21.0" https-proxy-agent: "npm:5.0.1" node-fetch: "npm:cjs" - checksum: 10c0/e77d98667c7d674f87deb299c57859739c1822c179eeb1f017219896669b5f6dff5f4030ccd981df639ca804344b7dd1e61e40352499454c1f90af21b2ec68c6 + checksum: 10c0/ddb54a8a01f75a45971fdde9e14f6d1e378331eab0643dab0d6dd661fec14279e03ba038e2334fa5ea5ca09fcd6f85633c19d3cc54ac3467d364b90d963dfefb languageName: node linkType: hard @@ -17652,40 +17740,40 @@ __metadata: languageName: node linkType: hard -"verdaccio-htpasswd@npm:12.0.0-next-7.20": - version: 12.0.0-next-7.20 - resolution: "verdaccio-htpasswd@npm:12.0.0-next-7.20" +"verdaccio-htpasswd@npm:13.0.0-next-8.1": + version: 13.0.0-next-8.1 + resolution: "verdaccio-htpasswd@npm:13.0.0-next-8.1" dependencies: - "@verdaccio/core": "npm:7.0.0-next-7.20" - "@verdaccio/file-locking": "npm:12.0.0-next.1" + "@verdaccio/core": "npm:8.0.0-next-8.1" + "@verdaccio/file-locking": "npm:13.0.0-next-8.0" apache-md5: "npm:1.1.8" bcryptjs: "npm:2.4.3" - core-js: "npm:3.35.0" - debug: "npm:4.3.4" + core-js: "npm:3.37.1" + debug: "npm:4.3.7" http-errors: "npm:2.0.0" unix-crypt-td-js: "npm:1.1.4" - checksum: 10c0/11db05b6612d37292f07b3f8d88a9d88751c6b11458f53f4db26a656a41a99faecbba590d1068632ffb0655305bc3046171cecf3fb1c48c726a6d727736fe2b3 + checksum: 10c0/327e02a544e2552ed87c34a56dfe8513c72f834bba5538343421dde7ef404e518e2f84bfa6eb87dc9b56c44f0d6665fbd1ebbe4b5ee92ee8e0864782be0e8f37 languageName: node linkType: hard -"verdaccio@npm:5.32.1": - version: 5.32.1 - resolution: "verdaccio@npm:5.32.1" +"verdaccio@npm:5.32.2": + version: 5.32.2 + resolution: "verdaccio@npm:5.32.2" dependencies: "@cypress/request": "npm:3.0.1" - "@verdaccio/auth": "npm:7.0.0-next-7.20" - "@verdaccio/config": "npm:7.0.0-next-7.20" - "@verdaccio/core": "npm:7.0.0-next-7.20" + "@verdaccio/auth": "npm:8.0.0-next-8.1" + "@verdaccio/config": "npm:8.0.0-next-8.1" + "@verdaccio/core": "npm:8.0.0-next-8.1" "@verdaccio/local-storage-legacy": "npm:11.0.2" - "@verdaccio/logger-7": "npm:7.0.0-next-7.20" - "@verdaccio/middleware": "npm:7.0.0-next-7.20" - "@verdaccio/search-indexer": "npm:7.0.0-next-7.2" - "@verdaccio/signature": "npm:7.0.0-next-7.5" + "@verdaccio/logger-7": "npm:8.0.0-next-8.1" + "@verdaccio/middleware": "npm:8.0.0-next-8.1" + "@verdaccio/search-indexer": "npm:8.0.0-next-8.0" + "@verdaccio/signature": "npm:8.0.0-next-8.0" "@verdaccio/streams": "npm:10.2.1" - "@verdaccio/tarball": "npm:12.0.0-next-7.20" - "@verdaccio/ui-theme": "npm:7.0.0-next-7.20" - "@verdaccio/url": "npm:12.0.0-next-7.20" - "@verdaccio/utils": "npm:7.0.0-next-7.20" + "@verdaccio/tarball": "npm:13.0.0-next-8.1" + "@verdaccio/ui-theme": "npm:8.0.0-next-8.1" + "@verdaccio/url": "npm:13.0.0-next-8.1" + "@verdaccio/utils": "npm:7.0.1-next-8.1" JSONStream: "npm:1.3.5" async: "npm:3.2.5" clipanion: "npm:4.0.0-rc.3" @@ -17693,7 +17781,7 @@ __metadata: cors: "npm:2.8.5" debug: "npm:^4.3.5" envinfo: "npm:7.13.0" - express: "npm:4.19.2" + express: "npm:4.21.0" express-rate-limit: "npm:5.5.1" fast-safe-stringify: "npm:2.1.1" handlebars: "npm:4.7.8" @@ -17708,11 +17796,11 @@ __metadata: pkginfo: "npm:0.4.1" semver: "npm:7.6.3" validator: "npm:13.12.0" - verdaccio-audit: "npm:12.0.0-next-7.20" - verdaccio-htpasswd: "npm:12.0.0-next-7.20" + verdaccio-audit: "npm:13.0.0-next-8.1" + verdaccio-htpasswd: "npm:13.0.0-next-8.1" bin: verdaccio: bin/verdaccio - checksum: 10c0/da25477e9f6c154e3d1ef0948c7e26fa46feedcc38b13e7db44fc015688f9c09f598a697c38b807a4a6a0cc45c1a5b3106238755d9c9d61813c753866dac8472 + checksum: 10c0/a9c0fdf2abaabb16ac622bc2697c949013c4b559025cbbe154f4ead34badde654fdff8e82e507f4b00c71a6a6e2788e19ea9c6861bf8d74e0fa45091aadf1c68 languageName: node linkType: hard @@ -17770,6 +17858,49 @@ __metadata: languageName: node linkType: hard +"vite@npm:5.4.5": + version: 5.4.5 + resolution: "vite@npm:5.4.5" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/89c6459452fc238cdf8e99681b30996af171c9c557af476f96408a18a639fb5a0a6ee2d2257e005b21dc284edceb604595c34920cd4a007ad18f7ebafb654c76 + languageName: node + linkType: hard + "void-elements@npm:^2.0.0": version: 2.0.1 resolution: "void-elements@npm:2.0.1" From 93542bfc6dadcb9c7148d4c32bbb57b2412eabb9 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 16 Sep 2024 03:18:20 +0000 Subject: [PATCH 38/53] build: update dependency @inquirer/prompts to v6 --- package.json | 2 +- packages/angular/cli/package.json | 2 +- .../schematics_cli/package.json | 2 +- yarn.lock | 205 +++++++++++------- 4 files changed, 133 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index adf4f60ec5a3..e6b15bd0e9ca 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@bazel/runfiles": "^5.8.1", "@discoveryjs/json-ext": "0.6.1", "@inquirer/confirm": "3.2.0", - "@inquirer/prompts": "5.5.0", + "@inquirer/prompts": "6.0.1", "@listr2/prompt-adapter-inquirer": "2.0.15", "@rollup/plugin-commonjs": "^26.0.0", "@rollup/plugin-node-resolve": "^13.0.5", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 1d4c89a54ff1..cf3be89ca339 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -25,7 +25,7 @@ "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", "@angular-devkit/core": "0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "5.5.0", + "@inquirer/prompts": "6.0.1", "@listr2/prompt-adapter-inquirer": "2.0.15", "@schematics/angular": "0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index 3be97f135fa8..971288cd5d93 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -18,7 +18,7 @@ "dependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "5.5.0", + "@inquirer/prompts": "6.0.1", "ansi-colors": "4.1.3", "symbol-observable": "4.0.0", "yargs-parser": "21.1.1" diff --git a/yarn.lock b/yarn.lock index e869a6df21e9..2135ceab2a48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -231,7 +231,7 @@ __metadata: dependencies: "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" "@angular-devkit/schematics": "npm:0.0.0-PLACEHOLDER" - "@inquirer/prompts": "npm:5.5.0" + "@inquirer/prompts": "npm:6.0.1" ansi-colors: "npm:4.1.3" symbol-observable: "npm:4.0.0" yargs-parser: "npm:21.1.1" @@ -523,7 +523,7 @@ __metadata: "@angular-devkit/architect": "npm:0.0.0-EXPERIMENTAL-PLACEHOLDER" "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" "@angular-devkit/schematics": "npm:0.0.0-PLACEHOLDER" - "@inquirer/prompts": "npm:5.5.0" + "@inquirer/prompts": "npm:6.0.1" "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@schematics/angular": "npm:0.0.0-PLACEHOLDER" "@yarnpkg/lockfile": "npm:1.1.0" @@ -664,7 +664,7 @@ __metadata: "@bazel/runfiles": "npm:^5.8.1" "@discoveryjs/json-ext": "npm:0.6.1" "@inquirer/confirm": "npm:3.2.0" - "@inquirer/prompts": "npm:5.5.0" + "@inquirer/prompts": "npm:6.0.1" "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@rollup/plugin-commonjs": "npm:^26.0.0" "@rollup/plugin-node-resolve": "npm:^13.0.5" @@ -2957,20 +2957,20 @@ __metadata: languageName: node linkType: hard -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" +"@inquirer/checkbox@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/checkbox@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" ansi-escapes: "npm:^4.3.2" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 + checksum: 10c0/1e8c508772757000209b89e7d0455ac5a0684b3ba3c4b5def13d4da95b19bcab670458d77a18f5a5daeec273578d1c3b2072030221dbfa7e0738abd5c0bc4af4 languageName: node linkType: hard -"@inquirer/confirm@npm:3.2.0, @inquirer/confirm@npm:^3.2.0": +"@inquirer/confirm@npm:3.2.0": version: 3.2.0 resolution: "@inquirer/confirm@npm:3.2.0" dependencies: @@ -2980,6 +2980,16 @@ __metadata: languageName: node linkType: hard +"@inquirer/confirm@npm:^4.0.1": + version: 4.0.1 + resolution: "@inquirer/confirm@npm:4.0.1" + dependencies: + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" + checksum: 10c0/8ea5e6a63efa348b626750384c249cc903280e38c2596bb42c640f178b375dbc389d8c4d040b2e4759b3937d8a188e245ca262b8dc7cdb2fa35dfce4104c2e8f + languageName: node + linkType: hard + "@inquirer/core@npm:^9.1.0": version: 9.1.0 resolution: "@inquirer/core@npm:9.1.0" @@ -3001,25 +3011,45 @@ __metadata: languageName: node linkType: hard -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" +"@inquirer/core@npm:^9.2.1": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" + "@types/mute-stream": "npm:^0.0.4" + "@types/node": "npm:^22.5.5" + "@types/wrap-ansi": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^1.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 + languageName: node + linkType: hard + +"@inquirer/editor@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/editor@npm:3.0.1" + dependencies: + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee + checksum: 10c0/edff144ce57d5a0793ae9c2ac3d16934d120ba9b277187613a44923a0b7dc45ba8b7382f56b66cf730c050b58637b236a0f8b280add33bbc53de1e78a10240e7 languageName: node linkType: hard -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" +"@inquirer/expand@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/expand@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 + checksum: 10c0/384db4ac56bc68b56a83a6d164ce039b35addd64a8e422cb8605e38d0f54a3654b4d2e4463575c6ffc34e30bcad5c728c23d7cc7227f4eb440b50fe36f6a785c languageName: node linkType: hard @@ -3030,88 +3060,95 @@ __metadata: languageName: node linkType: hard -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" +"@inquirer/figures@npm:^1.0.6": + version: 1.0.6 + resolution: "@inquirer/figures@npm:1.0.6" + checksum: 10c0/2a00cf8db0b038dfb3b7ac9d09fe57ba12f0349e6258ad821bfa8e2e3cd9127f34b88ed7cae3e3441586f988db4df16ba91d6d701f88e529e87d2c2130a5c138 + languageName: node + linkType: hard + +"@inquirer/input@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/input@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" + checksum: 10c0/e8b9d4ad933e70737903606241e8d1f317d3d57719ce0a77e97a050bd1109310bed8df0787ad7913ea699baaeefc448b52989de0a7c3b87ded0a3e54052a60d0 languageName: node linkType: hard -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" +"@inquirer/number@npm:^2.0.1": + version: 2.0.1 + resolution: "@inquirer/number@npm:2.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" + checksum: 10c0/560e34653693a940b6767e9071c8a361291636b47055f2847d7973e868afba87eedb999a60be0d78064f4481c091e64b913f4b9a84f2cd7a6774d65524bcccbc languageName: node linkType: hard -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" +"@inquirer/password@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/password@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f + checksum: 10c0/0223ce3f4700a1fa1bc3827bca35d71001e5b41c7a59717e078834bf66345c8c6bba5704350c8ae237e681c30969241ae918dba2e033d01810acf7ffefacd4e6 languageName: node linkType: hard -"@inquirer/prompts@npm:5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" +"@inquirer/prompts@npm:6.0.1": + version: 6.0.1 + resolution: "@inquirer/prompts@npm:6.0.1" dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 + "@inquirer/checkbox": "npm:^3.0.1" + "@inquirer/confirm": "npm:^4.0.1" + "@inquirer/editor": "npm:^3.0.1" + "@inquirer/expand": "npm:^3.0.1" + "@inquirer/input": "npm:^3.0.1" + "@inquirer/number": "npm:^2.0.1" + "@inquirer/password": "npm:^3.0.1" + "@inquirer/rawlist": "npm:^3.0.1" + "@inquirer/search": "npm:^2.0.1" + "@inquirer/select": "npm:^3.0.1" + checksum: 10c0/42fe55137531a2d18c24f910fec2d2f1a4b086ad3ad29e8b85aeb8b454ca8e132e463623f1b9e7ac5c60c58010970a923cec23ed94ff14dc23eef086e2641fca languageName: node linkType: hard -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" +"@inquirer/rawlist@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/rawlist@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/type": "npm:^2.0.0" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 + checksum: 10c0/1b2f0693ad8ae59d22c1dbec03518ee800af7553225cc1e7a7740b0eb2dd59c5c09705217fe2f9946b20c0221a4e3b2a17258a9cb496fd2eb5af0a0c9ac1cfca languageName: node linkType: hard -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" +"@inquirer/search@npm:^2.0.1": + version: 2.0.1 + resolution: "@inquirer/search@npm:2.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 + checksum: 10c0/3d016b259304fa566961e64266af03e748486aa306c76326ef20893706e16019cb91fba32561dd4c2910718e4b7959107922c6485abc88aff49edf94a6e2c76a languageName: node linkType: hard -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" +"@inquirer/select@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/select@npm:3.0.1" dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/core": "npm:^9.2.1" + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" ansi-escapes: "npm:^4.3.2" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c + checksum: 10c0/83aa571dba12f69f267507230055d07279a7352ef032d6ea849eb32cd663f3e26aab2ce4fd5f59231f4c7624b92e7d40dd8eef5907431e81eb3d45d062c2cbb8 languageName: node linkType: hard @@ -3124,6 +3161,15 @@ __metadata: languageName: node linkType: hard +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -5012,6 +5058,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.5.5": + version: 22.5.5 + resolution: "@types/node@npm:22.5.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c + languageName: node + linkType: hard + "@types/npm-package-arg@npm:*, @types/npm-package-arg@npm:^6.1.0": version: 6.1.4 resolution: "@types/npm-package-arg@npm:6.1.4" From d60f3fef30f1508494eed646c834afb8ce632bd3 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 16 Sep 2024 07:12:39 +0000 Subject: [PATCH 39/53] build: update dependency @inquirer/confirm to v4 --- package.json | 2 +- packages/angular/build/package.json | 2 +- yarn.lock | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e6b15bd0e9ca..a42849547a3d 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@bazel/jasmine": "patch:@bazel/jasmine@npm%3A5.8.1#~/.yarn/patches/@bazel-jasmine-npm-5.8.1-3370fee155.patch", "@bazel/runfiles": "^5.8.1", "@discoveryjs/json-ext": "0.6.1", - "@inquirer/confirm": "3.2.0", + "@inquirer/confirm": "4.0.1", "@inquirer/prompts": "6.0.1", "@listr2/prompt-adapter-inquirer": "2.0.15", "@rollup/plugin-commonjs": "^26.0.0", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 95c83b797ae8..cc45b68c33ca 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -24,7 +24,7 @@ "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-syntax-import-attributes": "7.25.6", - "@inquirer/confirm": "3.2.0", + "@inquirer/confirm": "4.0.1", "@vitejs/plugin-basic-ssl": "1.1.0", "browserslist": "^4.23.0", "critters": "0.0.24", diff --git a/yarn.lock b/yarn.lock index 2135ceab2a48..ebd0b207bae4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -387,7 +387,7 @@ __metadata: "@babel/helper-annotate-as-pure": "npm:7.24.7" "@babel/helper-split-export-declaration": "npm:7.24.7" "@babel/plugin-syntax-import-attributes": "npm:7.25.6" - "@inquirer/confirm": "npm:3.2.0" + "@inquirer/confirm": "npm:4.0.1" "@vitejs/plugin-basic-ssl": "npm:1.1.0" browserslist: "npm:^4.23.0" critters: "npm:0.0.24" @@ -663,7 +663,7 @@ __metadata: "@bazel/jasmine": "patch:@bazel/jasmine@npm%3A5.8.1#~/.yarn/patches/@bazel-jasmine-npm-5.8.1-3370fee155.patch" "@bazel/runfiles": "npm:^5.8.1" "@discoveryjs/json-ext": "npm:0.6.1" - "@inquirer/confirm": "npm:3.2.0" + "@inquirer/confirm": "npm:4.0.1" "@inquirer/prompts": "npm:6.0.1" "@listr2/prompt-adapter-inquirer": "npm:2.0.15" "@rollup/plugin-commonjs": "npm:^26.0.0" @@ -2980,7 +2980,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/confirm@npm:^4.0.1": +"@inquirer/confirm@npm:4.0.1, @inquirer/confirm@npm:^4.0.1": version: 4.0.1 resolution: "@inquirer/confirm@npm:4.0.1" dependencies: From 2640bf7a680300acf18cf6502c57a00e0a5bfda9 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 16 Sep 2024 19:07:52 +0000 Subject: [PATCH 40/53] fix(@angular/ssr): correct route extraction and error handling This commit introduces the following changes: - Disallows paths starting with a slash to match Angular router behavior. - Errors are now stored and displayed at a later stage, improving UX by avoiding unnecessary stack traces that are not useful in this context. --- .../src/utils/server-rendering/prerender.ts | 20 +- .../routes-extractor-worker.ts | 16 +- packages/angular/ssr/node/src/app-engine.ts | 2 +- packages/angular/ssr/src/routes/ng-routes.ts | 293 +++++++++++------- packages/angular/ssr/src/routes/route-tree.ts | 17 +- packages/angular/ssr/src/routes/router.ts | 11 +- packages/angular/ssr/src/utils/url.ts | 47 ++- packages/angular/ssr/test/app-engine_spec.ts | 4 +- packages/angular/ssr/test/app_spec.ts | 8 +- .../angular/ssr/test/routes/ng-routes_spec.ts | 62 +++- .../angular/ssr/test/routes/router_spec.ts | 4 +- packages/angular/ssr/test/utils/url_spec.ts | 46 ++- 12 files changed, 365 insertions(+), 165 deletions(-) diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index f6e1b877b819..1b53fd9ca6d9 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -15,8 +15,9 @@ import { BuildOutputAsset } from '../../tools/esbuild/bundler-execution-result'; import { urlJoin } from '../url'; import type { RenderWorkerData } from './render-worker'; import type { + RoutersExtractorWorkerResult, RoutesExtractorWorkerData, - RoutersExtractorWorkerResult as SerializableRouteTreeNode, + SerializableRouteTreeNode, } from './routes-extractor-worker'; interface PrerenderOptions { @@ -298,14 +299,15 @@ async function getAllRoutes( }); const errors: string[] = []; - const serializableRouteTreeNode: SerializableRouteTreeNode = await renderWorker - .run({}) - .catch((err) => { - errors.push(`An error occurred while extracting routes.\n\n${err.stack}`); - }) - .finally(() => { - void renderWorker.destroy(); - }); + const { serializedRouteTree: serializableRouteTreeNode }: RoutersExtractorWorkerResult = + await renderWorker + .run({}) + .catch((err) => { + errors.push(`An error occurred while extracting routes.\n\n${err.stack}`); + }) + .finally(() => { + void renderWorker.destroy(); + }); const skippedRedirects: string[] = []; const skippedOthers: string[] = []; diff --git a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts index 80afa0cfdccd..f62f30649491 100644 --- a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts +++ b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts @@ -15,22 +15,30 @@ export interface RoutesExtractorWorkerData extends ESMInMemoryFileLoaderWorkerDa assetFiles: Record; } -export type RoutersExtractorWorkerResult = ReturnType< - Awaited>['toObject'] +export type SerializableRouteTreeNode = ReturnType< + Awaited>['routeTree']['toObject'] >; +export interface RoutersExtractorWorkerResult { + serializedRouteTree: SerializableRouteTreeNode; + errors: string[]; +} + /** Renders an application based on a provided options. */ async function extractRoutes(): Promise { const { ɵextractRoutesAndCreateRouteTree: extractRoutesAndCreateRouteTree } = await loadEsmModuleFromMemory('./main.server.mjs'); - const routeTree = await extractRoutesAndCreateRouteTree( + const { routeTree, errors } = await extractRoutesAndCreateRouteTree( new URL('http://local-angular-prerender/'), /** manifest */ undefined, /** invokeGetPrerenderParams */ true, ); - return routeTree.toObject(); + return { + errors, + serializedRouteTree: routeTree.toObject(), + }; } function initialize() { diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index 3ae8f16e10a4..abfbe2944650 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -59,7 +59,7 @@ export class AngularNodeAppEngine { * const headers = angularAppEngine.getPrerenderHeaders(res.req); * * // Apply the retrieved headers to the response - * for (const { key, value } of headers) { + * for (const [key, value] of headers) { * res.setHeader(key, value); * } * } diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index 583fa0000ece..b4b3ddda39ce 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -77,6 +77,11 @@ interface AngularRouterConfigResult { * If not provided, the default configuration or behavior will be used. */ serverRoutesConfig?: ServerRoute[] | null; + + /** + * A list of errors encountered during the route extraction process. + */ + errors: string[]; } /** @@ -86,9 +91,9 @@ interface AngularRouterConfigResult { * and lazy-loaded routes. It yields route metadata for each route and its potential variants. * * @param options - The configuration options for traversing routes. - * @returns An async iterable iterator of route tree node metadata. + * @returns An async iterable iterator yielding either route tree node metadata or an error object with an error message. */ -export async function* traverseRoutesConfig({ +async function* traverseRoutesConfig({ routes, compiler, parentInjector, @@ -102,108 +107,103 @@ export async function* traverseRoutesConfig({ parentRoute: string; serverConfigRouteTree: RouteTree | undefined; invokeGetPrerenderParams: boolean; -}): AsyncIterableIterator { +}): AsyncIterableIterator { for (const route of routes) { - const { path = '', redirectTo, loadChildren, children } = route; - const currentRoutePath = joinUrlParts(parentRoute, path); - - // Get route metadata from the server config route tree, if available - const metadata: ServerConfigRouteTreeNodeMetadata = { - ...(serverConfigRouteTree - ? getMatchedRouteMetadata(serverConfigRouteTree, currentRoutePath) - : undefined), - route: currentRoutePath, - }; - - // Handle redirects - if (typeof redirectTo === 'string') { - const redirectToResolved = resolveRedirectTo(currentRoutePath, redirectTo); - if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) { - throw new Error( - `The '${metadata.status}' status code is not a valid redirect response code. ` + - `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`, - ); + try { + const { path = '', redirectTo, loadChildren, children } = route; + const currentRoutePath = joinUrlParts(parentRoute, path); + + // Get route metadata from the server config route tree, if available + let matchedMetaData: ServerConfigRouteTreeNodeMetadata | undefined; + if (serverConfigRouteTree) { + matchedMetaData = serverConfigRouteTree.match(currentRoutePath); + if (!matchedMetaData) { + yield { + error: + `The '${currentRoutePath}' route does not match any route defined in the server routing configuration. ` + + 'Please ensure this route is added to the server routing configuration.', + }; + + continue; + } } - yield { ...metadata, redirectTo: redirectToResolved }; - } else if (metadata.renderMode === RenderMode.Prerender) { - // Handle SSG routes - yield* handleSSGRoute(metadata, parentInjector, invokeGetPrerenderParams); - } else { - yield metadata; - } - // Recursively process child routes - if (children?.length) { - yield* traverseRoutesConfig({ - routes: children, - compiler, - parentInjector, - parentRoute: currentRoutePath, - serverConfigRouteTree, - invokeGetPrerenderParams, - }); - } - - // Load and process lazy-loaded child routes - if (loadChildren) { - const loadedChildRoutes = await loadChildrenHelper( - route, - compiler, - parentInjector, - ).toPromise(); + const metadata: ServerConfigRouteTreeNodeMetadata = { + ...matchedMetaData, + route: currentRoutePath, + }; + + // Handle redirects + if (typeof redirectTo === 'string') { + const redirectToResolved = resolveRedirectTo(currentRoutePath, redirectTo); + if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) { + yield { + error: + `The '${metadata.status}' status code is not a valid redirect response code. ` + + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`, + }; + continue; + } + yield { ...metadata, redirectTo: redirectToResolved }; + } else if (metadata.renderMode === RenderMode.Prerender) { + // Handle SSG routes + yield* handleSSGRoute(metadata, parentInjector, invokeGetPrerenderParams); + } else { + yield metadata; + } - if (loadedChildRoutes) { - const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes; + // Recursively process child routes + if (children?.length) { yield* traverseRoutesConfig({ - routes: childRoutes, + routes: children, compiler, - parentInjector: injector, + parentInjector, parentRoute: currentRoutePath, serverConfigRouteTree, invokeGetPrerenderParams, }); } - } - } -} -/** - * Retrieves the matched route metadata from the server configuration route tree. - * - * @param serverConfigRouteTree - The server configuration route tree. - * @param currentRoutePath - The current route path being processed. - * @returns The metadata associated with the matched route. - */ -function getMatchedRouteMetadata( - serverConfigRouteTree: RouteTree, - currentRoutePath: string, -): ServerConfigRouteTreeNodeMetadata { - const metadata = serverConfigRouteTree.match(currentRoutePath); - - if (!metadata) { - throw new Error( - `The '${currentRoutePath}' route does not match any route defined in the server routing configuration. ` + - 'Please ensure this route is added to the server routing configuration.', - ); + // Load and process lazy-loaded child routes + if (loadChildren) { + const loadedChildRoutes = await loadChildrenHelper( + route, + compiler, + parentInjector, + ).toPromise(); + + if (loadedChildRoutes) { + const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes; + yield* traverseRoutesConfig({ + routes: childRoutes, + compiler, + parentInjector: injector, + parentRoute: currentRoutePath, + serverConfigRouteTree, + invokeGetPrerenderParams, + }); + } + } + } catch (error) { + yield { error: `Error processing route '${route.path}': ${(error as Error).message}` }; + } } - - return metadata; } /** * Handles SSG (Static Site Generation) routes by invoking `getPrerenderParams` and yielding - * all parameterized paths. + * all parameterized paths, returning any errors encountered. * * @param metadata - The metadata associated with the route tree node. * @param parentInjector - The dependency injection container for the parent route. * @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function. - * @returns An async iterable iterator that yields route tree node metadata for each SSG path. + * @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors. */ async function* handleSSGRoute( metadata: ServerConfigRouteTreeNodeMetadata, parentInjector: Injector, invokeGetPrerenderParams: boolean, -): AsyncIterableIterator { +): AsyncIterableIterator { if (metadata.renderMode !== RenderMode.Prerender) { throw new Error( `'handleSSGRoute' was called for a route which rendering mode is not prerender.`, @@ -217,34 +217,52 @@ async function* handleSSGRoute( delete meta['getPrerenderParams']; } - if (invokeGetPrerenderParams && URL_PARAMETER_REGEXP.test(currentRoutePath)) { + if (!URL_PARAMETER_REGEXP.test(currentRoutePath)) { + // Route has no parameters + yield { + ...meta, + route: currentRoutePath, + }; + + return; + } + + if (invokeGetPrerenderParams) { if (!getPrerenderParams) { - throw new Error( - `The '${currentRoutePath}' route uses prerendering and includes parameters, but 'getPrerenderParams' is missing. ` + + yield { + error: + `The '${currentRoutePath}' route uses prerendering and includes parameters, but 'getPrerenderParams' is missing. ` + `Please define 'getPrerenderParams' function for this route in your server routing configuration ` + `or specify a different 'renderMode'.`, - ); + }; + + return; } const parameters = await runInInjectionContext(parentInjector, () => getPrerenderParams()); + try { + for (const params of parameters) { + const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, (match) => { + const parameterName = match.slice(1); + const value = params[parameterName]; + if (typeof value !== 'string') { + throw new Error( + `The 'getPrerenderParams' function defined for the '${currentRoutePath}' route ` + + `returned a non-string value for parameter '${parameterName}'. ` + + `Please make sure the 'getPrerenderParams' function returns values for all parameters ` + + 'specified in this route.', + ); + } + + return value; + }); - for (const params of parameters) { - const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, (match) => { - const parameterName = match.slice(1); - const value = params[parameterName]; - if (typeof value !== 'string') { - throw new Error( - `The 'getPrerenderParams' function defined for the '${currentRoutePath}' route ` + - `returned a non-string value for parameter '${parameterName}'. ` + - `Please make sure the 'getPrerenderParams' function returns values for all parameters ` + - 'specified in this route.', - ); - } - - return value; - }); + yield { ...meta, route: routeWithResolvedParams }; + } + } catch (error) { + yield { error: `${(error as Error).message}` }; - yield { ...meta, route: routeWithResolvedParams }; + return; } } @@ -286,17 +304,31 @@ function resolveRedirectTo(routePath: string, redirectTo: string): string { * Builds a server configuration route tree from the given server routes configuration. * * @param serverRoutesConfig - The array of server routes to be used for configuration. - * @returns A `RouteTree` populated with the server routes and their metadata. + + * @returns An object containing: + * - `serverConfigRouteTree`: A populated `RouteTree` instance, which organizes the server routes + * along with their additional metadata. + * - `errors`: An array of strings that list any errors encountered during the route tree construction + * process, such as invalid paths. */ -function buildServerConfigRouteTree( - serverRoutesConfig: ServerRoute[], -): RouteTree { +function buildServerConfigRouteTree(serverRoutesConfig: ServerRoute[]): { + errors: string[]; + serverConfigRouteTree: RouteTree; +} { const serverConfigRouteTree = new RouteTree(); + const errors: string[] = []; + for (const { path, ...metadata } of serverRoutesConfig) { + if (path[0] === '/') { + errors.push(`Invalid '${path}' route configuration: the path cannot start with a slash.`); + + continue; + } + serverConfigRouteTree.insert(path, metadata); } - return serverConfigRouteTree; + return { serverConfigRouteTree, errors }; } /** @@ -304,7 +336,7 @@ function buildServerConfigRouteTree( * * This function initializes an Angular platform, bootstraps the application or module, * and retrieves routes from the Angular router configuration. It handles both module-based - * and function-based bootstrapping. It yields the resulting routes as `RouteTreeNodeMetadata` objects. + * and function-based bootstrapping. It yields the resulting routes as `RouteTreeNodeMetadata` objects or errors. * * @param bootstrap - A function that returns a promise resolving to an `ApplicationRef` or an Angular module to bootstrap. * @param document - The initial HTML document used for server-side rendering. @@ -313,10 +345,7 @@ function buildServerConfigRouteTree( * for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction. * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes * to handle prerendering paths. Defaults to `false`. - * See: - * - https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51 - * - https://github.com/angular/angular/blob/6882cc7d9eed26d3caeedca027452367ba25f2b9/packages/platform-server/src/http.ts#L44 - * @returns A promise that resolves to an object of type `AngularRouterConfigResult`. + * @returns A promise that resolves to an object of type `AngularRouterConfigResult` or errors. */ export async function getRoutesFromAngularRouterConfig( bootstrap: AngularBootstrap, @@ -355,14 +384,31 @@ export async function getRoutesFromAngularRouterConfig( const injector = applicationRef.injector; const router = injector.get(Router); const routesResults: RouteTreeNodeMetadata[] = []; + const errors: string[] = []; + + const baseHref = + injector.get(APP_BASE_HREF, null, { optional: true }) ?? + injector.get(PlatformLocation).getBaseHrefFromDOM(); if (router.config.length) { const compiler = injector.get(Compiler); const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true }); - const serverConfigRouteTree = serverRoutesConfig - ? buildServerConfigRouteTree(serverRoutesConfig) - : undefined; + let serverConfigRouteTree: RouteTree | undefined; + + if (serverRoutesConfig) { + const result = buildServerConfigRouteTree(serverRoutesConfig); + serverConfigRouteTree = result.serverConfigRouteTree; + errors.push(...result.errors); + } + + if (errors.length) { + return { + baseHref, + routes: routesResults, + errors, + }; + } // Retrieve all routes from the Angular router configuration. const traverseRoutes = traverseRoutesConfig({ @@ -375,19 +421,20 @@ export async function getRoutesFromAngularRouterConfig( }); for await (const result of traverseRoutes) { - routesResults.push(result); + if ('error' in result) { + errors.push(result.error); + } else { + routesResults.push(result); + } } } else { routesResults.push({ route: '', renderMode: RenderMode.Prerender }); } - const baseHref = - injector.get(APP_BASE_HREF, null, { optional: true }) ?? - injector.get(PlatformLocation).getBaseHrefFromDOM(); - return { baseHref, routes: routesResults, + errors, }; } finally { platformRef.destroy(); @@ -407,17 +454,20 @@ export async function getRoutesFromAngularRouterConfig( * If not provided, the default manifest is retrieved using `getAngularAppManifest()`. * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes * to handle prerendering paths. Defaults to `false`. - * @returns A promise that resolves to a populated `RouteTree` containing all extracted routes from the Angular application. + * + * @returns A promise that resolves to an object containing: + * - `routeTree`: A populated `RouteTree` containing all extracted routes from the Angular application. + * - `errors`: An array of strings representing any errors encountered during the route extraction process. */ export async function extractRoutesAndCreateRouteTree( url: URL, manifest: AngularAppManifest = getAngularAppManifest(), invokeGetPrerenderParams = false, -): Promise { +): Promise<{ routeTree: RouteTree; errors: string[] }> { const routeTree = new RouteTree(); const document = await new ServerAssets(manifest).getIndexServerHtml(); const bootstrap = await manifest.bootstrap(); - const { baseHref, routes } = await getRoutesFromAngularRouterConfig( + const { baseHref, routes, errors } = await getRoutesFromAngularRouterConfig( bootstrap, document, url, @@ -433,5 +483,8 @@ export async function extractRoutesAndCreateRouteTree( routeTree.insert(fullRoute, metadata); } - return routeTree; + return { + routeTree, + errors, + }; } diff --git a/packages/angular/ssr/src/routes/route-tree.ts b/packages/angular/ssr/src/routes/route-tree.ts index f3b07859cc28..8b8db243b21e 100644 --- a/packages/angular/ssr/src/routes/route-tree.ts +++ b/packages/angular/ssr/src/routes/route-tree.ts @@ -131,8 +131,7 @@ export class RouteTree = {}> */ insert(route: string, metadata: RouteTreeNodeMetadataWithoutRoute & AdditionalMetadata): void { let node = this.root; - const normalizedRoute = stripTrailingSlash(route); - const segments = normalizedRoute.split('/'); + const segments = this.getPathSegments(route); for (const segment of segments) { // Replace parameterized segments (e.g., :id) with a wildcard (*) for matching @@ -150,7 +149,7 @@ export class RouteTree = {}> // At the leaf node, store the full route and its associated metadata node.metadata = { ...metadata, - route: normalizedRoute, + route: segments.join('/'), }; node.insertionIndex = this.insertionIndexCounter++; @@ -165,7 +164,7 @@ export class RouteTree = {}> * @returns The metadata of the best matching route or `undefined` if no match is found. */ match(route: string): (RouteTreeNodeMetadata & AdditionalMetadata) | undefined { - const segments = stripTrailingSlash(route).split('/'); + const segments = this.getPathSegments(route); return this.traverseBySegments(segments)?.metadata; } @@ -218,6 +217,16 @@ export class RouteTree = {}> } } + /** + * Extracts the path segments from a given route string. + * + * @param route - The route string from which to extract segments. + * @returns An array of path segments. + */ + private getPathSegments(route: string): string[] { + return stripTrailingSlash(route).split('/'); + } + /** * Recursively traverses the route tree from a given node, attempting to match the remaining route segments. * If the node is a leaf node (no more segments to match) and contains metadata, the node is yielded. diff --git a/packages/angular/ssr/src/routes/router.ts b/packages/angular/ssr/src/routes/router.ts index b708356b331d..bd63fa729a82 100644 --- a/packages/angular/ssr/src/routes/router.ts +++ b/packages/angular/ssr/src/routes/router.ts @@ -55,7 +55,16 @@ export class ServerRouter { // Create and store a new promise for the build process. // This prevents concurrent builds by re-using the same promise. ServerRouter.#extractionPromise ??= extractRoutesAndCreateRouteTree(url, manifest) - .then((routeTree) => new ServerRouter(routeTree)) + .then(({ routeTree, errors }) => { + if (errors.length > 0) { + throw new Error( + 'Error(s) occurred while extracting routes:\n' + + errors.map((error) => `- ${error}`).join('\n'), + ); + } + + return new ServerRouter(routeTree); + }) .finally(() => { ServerRouter.#extractionPromise = undefined; }); diff --git a/packages/angular/ssr/src/utils/url.ts b/packages/angular/ssr/src/utils/url.ts index 9d3d9dc4620d..db68ce3570e6 100644 --- a/packages/angular/ssr/src/utils/url.ts +++ b/packages/angular/ssr/src/utils/url.ts @@ -16,11 +16,49 @@ * ```js * stripTrailingSlash('path/'); // 'path' * stripTrailingSlash('/path'); // '/path' + * stripTrailingSlash('/'); // '/' + * stripTrailingSlash(''); // '' * ``` */ export function stripTrailingSlash(url: string): string { // Check if the last character of the URL is a slash - return url[url.length - 1] === '/' ? url.slice(0, -1) : url; + return url.length > 1 && url[url.length - 1] === '/' ? url.slice(0, -1) : url; +} + +/** + * Removes the leading slash from a URL if it exists. + * + * @param url - The URL string from which to remove the leading slash. + * @returns The URL string without a leading slash. + * + * @example + * ```js + * stripLeadingSlash('/path'); // 'path' + * stripLeadingSlash('/path/'); // 'path/' + * stripLeadingSlash('/'); // '/' + * stripLeadingSlash(''); // '' + * ``` + */ +export function stripLeadingSlash(url: string): string { + // Check if the first character of the URL is a slash + return url.length > 1 && url[0] === '/' ? url.slice(1) : url; +} + +/** + * Adds a leading slash to a URL if it does not already have one. + * + * @param url - The URL string to which the leading slash will be added. + * @returns The URL string with a leading slash. + * + * @example + * ```js + * addLeadingSlash('path'); // '/path' + * addLeadingSlash('/path'); // '/path' + * ``` + */ +export function addLeadingSlash(url: string): string { + // Check if the URL already starts with a slash + return url[0] === '/' ? url : `/${url}`; } /** @@ -36,12 +74,11 @@ export function stripTrailingSlash(url: string): string { * ```js * joinUrlParts('path/', '/to/resource'); // '/path/to/resource' * joinUrlParts('/path/', 'to/resource'); // '/path/to/resource' + * joinUrlParts('', ''); // '/' * ``` */ export function joinUrlParts(...parts: string[]): string { - // Initialize an array with an empty string to always add a leading slash - const normalizeParts: string[] = ['']; - + const normalizeParts: string[] = []; for (const part of parts) { if (part === '') { // Skip any empty parts @@ -60,7 +97,7 @@ export function joinUrlParts(...parts: string[]): string { } } - return normalizeParts.join('/'); + return addLeadingSlash(normalizeParts.join('/')); } /** diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 7384f62456c1..0e27776a368e 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -41,7 +41,7 @@ describe('AngularAppEngine', () => { setAngularAppTestingManifest( [{ path: 'home', component: HomeComponent }], - [{ path: '/**', renderMode: RenderMode.Server }], + [{ path: '**', renderMode: RenderMode.Server }], locale, ); @@ -150,7 +150,7 @@ describe('AngularAppEngine', () => { setAngularAppTestingManifest( [{ path: 'home', component: HomeComponent }], - [{ path: '/**', renderMode: RenderMode.Server }], + [{ path: '**', renderMode: RenderMode.Server }], ); return { diff --git a/packages/angular/ssr/test/app_spec.ts b/packages/angular/ssr/test/app_spec.ts index 82a70bd0219e..7e2df85fffa7 100644 --- a/packages/angular/ssr/test/app_spec.ts +++ b/packages/angular/ssr/test/app_spec.ts @@ -41,16 +41,16 @@ describe('AngularServerApp', () => { ], [ { - path: '/home-csr', + path: 'home-csr', renderMode: RenderMode.Client, }, { - path: '/page-with-status', + path: 'page-with-status', renderMode: RenderMode.Server, status: 201, }, { - path: '/page-with-headers', + path: 'page-with-headers', renderMode: RenderMode.Server, headers: { 'Cache-Control': 'no-cache', @@ -58,7 +58,7 @@ describe('AngularServerApp', () => { }, }, { - path: '/**', + path: '**', renderMode: RenderMode.Server, }, ], diff --git a/packages/angular/ssr/test/routes/ng-routes_spec.ts b/packages/angular/ssr/test/routes/ng-routes_spec.ts index da347f9768f0..556d051f7927 100644 --- a/packages/angular/ssr/test/routes/ng-routes_spec.ts +++ b/packages/angular/ssr/test/routes/ng-routes_spec.ts @@ -29,25 +29,61 @@ describe('extractRoutesAndCreateRouteTree', () => { it('should extract routes and create a route tree', async () => { setAngularAppTestingManifest( [ + { path: '', component: DummyComponent }, { path: 'home', component: DummyComponent }, { path: 'redirect', redirectTo: 'home' }, { path: 'user/:id', component: DummyComponent }, ], [ - { path: '/home', renderMode: RenderMode.Client }, - { path: '/redirect', renderMode: RenderMode.Server, status: 301 }, - { path: '/**', renderMode: RenderMode.Server }, + { path: 'home', renderMode: RenderMode.Client }, + { path: 'redirect', renderMode: RenderMode.Server, status: 301 }, + { path: '**', renderMode: RenderMode.Server }, ], ); - const routeTree = await extractRoutesAndCreateRouteTree(url); + const { routeTree, errors } = await extractRoutesAndCreateRouteTree(url); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ + { route: '/', renderMode: RenderMode.Server }, { route: '/home', renderMode: RenderMode.Client }, { route: '/redirect', renderMode: RenderMode.Server, status: 301, redirectTo: '/home' }, { route: '/user/:id', renderMode: RenderMode.Server }, ]); }); + it('should handle invalid route configuration path', async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: DummyComponent }], + [ + // This path starts with a slash, which should trigger an error + { path: '/invalid', renderMode: RenderMode.Client }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree(url); + expect(errors[0]).toContain( + `Invalid '/invalid' route configuration: the path cannot start with a slash.`, + ); + }); + + it('should handle route not matching server routing configuration', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'about', component: DummyComponent }, // This route is not in the server configuration + ], + [ + { path: 'home', renderMode: RenderMode.Client }, + // 'about' route is missing here + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree(url); + expect(errors[0]).toContain( + `The '/about' route does not match any route defined in the server routing configuration.`, + ); + }); + describe('when `invokeGetPrerenderParams` is true', () => { it('should resolve parameterized routes for SSG and add a fallback route if fallback is Server', async () => { setAngularAppTestingManifest( @@ -67,7 +103,8 @@ describe('extractRoutesAndCreateRouteTree', () => { ], ); - const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + const { routeTree, errors } = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, { @@ -96,11 +133,12 @@ describe('extractRoutesAndCreateRouteTree', () => { ]; }, }, - { path: '/**', renderMode: RenderMode.Server }, + { path: '**', renderMode: RenderMode.Server }, ], ); - const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + const { routeTree, errors } = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ { route: '/home', renderMode: RenderMode.Server }, { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, @@ -130,11 +168,12 @@ describe('extractRoutesAndCreateRouteTree', () => { ]; }, }, - { path: '/**', renderMode: RenderMode.Server }, + { path: '**', renderMode: RenderMode.Server }, ], ); - const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, true); + const { routeTree, errors } = await extractRoutesAndCreateRouteTree(url, undefined, true); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ { route: '/home', renderMode: RenderMode.Server }, { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, @@ -163,11 +202,12 @@ describe('extractRoutesAndCreateRouteTree', () => { ]; }, }, - { path: '/**', renderMode: RenderMode.Server }, + { path: '**', renderMode: RenderMode.Server }, ], ); - const routeTree = await extractRoutesAndCreateRouteTree(url, undefined, false); + const { routeTree, errors } = await extractRoutesAndCreateRouteTree(url, undefined, false); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ { route: '/home', renderMode: RenderMode.Server }, { route: '/user/:id/role/:role', renderMode: RenderMode.Server }, diff --git a/packages/angular/ssr/test/routes/router_spec.ts b/packages/angular/ssr/test/routes/router_spec.ts index dc87a8e593e6..4a64e0713eaf 100644 --- a/packages/angular/ssr/test/routes/router_spec.ts +++ b/packages/angular/ssr/test/routes/router_spec.ts @@ -37,8 +37,8 @@ describe('ServerRouter', () => { { path: 'user/:id', component: DummyComponent }, ], [ - { path: '/redirect', renderMode: RenderMode.Server, status: 301 }, - { path: '/**', renderMode: RenderMode.Server }, + { path: 'redirect', renderMode: RenderMode.Server, status: 301 }, + { path: '**', renderMode: RenderMode.Server }, ], ); diff --git a/packages/angular/ssr/test/utils/url_spec.ts b/packages/angular/ssr/test/utils/url_spec.ts index a081b064af27..2cebcf0c5b53 100644 --- a/packages/angular/ssr/test/utils/url_spec.ts +++ b/packages/angular/ssr/test/utils/url_spec.ts @@ -6,7 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import { joinUrlParts, stripIndexHtmlFromURL, stripTrailingSlash } from '../../src/utils/url'; // Adjust the import path as needed +import { + addLeadingSlash, + joinUrlParts, + stripIndexHtmlFromURL, + stripLeadingSlash, + stripTrailingSlash, +} from '../../src/utils/url'; describe('URL Utils', () => { describe('stripTrailingSlash', () => { @@ -23,7 +29,39 @@ describe('URL Utils', () => { }); it('should handle URL with only a trailing slash', () => { - expect(stripTrailingSlash('/')).toBe(''); + expect(stripTrailingSlash('/')).toBe('/'); + }); + }); + + describe('stripLeadingSlash', () => { + it('should remove leading slash from URL', () => { + expect(stripLeadingSlash('/path/')).toBe('path/'); + }); + + it('should not modify URL if no leading slash is present', () => { + expect(stripLeadingSlash('path/')).toBe('path/'); + }); + + it('should handle empty URL', () => { + expect(stripLeadingSlash('')).toBe(''); + }); + + it('should handle URL with only a leading slash', () => { + expect(stripLeadingSlash('/')).toBe('/'); + }); + }); + + describe('addLeadingSlash', () => { + it('should add a leading slash to a URL without one', () => { + expect(addLeadingSlash('path/')).toBe('/path/'); + }); + + it('should not modify URL if it already has a leading slash', () => { + expect(addLeadingSlash('/path/')).toBe('/path/'); + }); + + it('should handle empty URL', () => { + expect(addLeadingSlash('')).toBe('/'); }); }); @@ -39,6 +77,10 @@ describe('URL Utils', () => { it('should handle empty URL parts', () => { expect(joinUrlParts('', '', 'path', '', 'to/resource')).toBe('/path/to/resource'); }); + + it('should handle an all-empty URL parts', () => { + expect(joinUrlParts('', '')).toBe('/'); + }); }); describe('stripIndexHtmlFromURL', () => { From 5d6f1db71ae0f92576cabc540b0ae816ef201cef Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Sat, 14 Sep 2024 05:08:16 +0000 Subject: [PATCH 41/53] build: update github/codeql-action action to v3.26.7 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 556abe176bed..dbc7e95de17b 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 with: sarif_file: results.sarif From fecb00eab1733c8d60332621da6a4137609d7d0e Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 16 Sep 2024 18:09:28 +0000 Subject: [PATCH 42/53] build: update angular --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 42 +++++++++---------- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/pr.yml | 34 +++++++-------- package.json | 4 +- tests/legacy-cli/e2e/ng-snapshot/package.json | 32 +++++++------- yarn.lock | 20 ++++----- 8 files changed, 70 insertions(+), 70 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index e4bda0e76f38..c279978350c3 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@bd7b63896ab21fc258f8f9236165c37e62db27d8 + - uses: angular/dev-infra/github-actions/branch-manager@a95d79881ee8d7da8d65579948b296edfe6722c1 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2d644bf8ca1..717a33d66cc5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Generate JSON schema types @@ -42,11 +42,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -56,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -90,13 +90,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} @@ -149,13 +149,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -182,11 +182,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - run: yarn admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index e9276bfd8be3..b41e3a4da806 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@bd7b63896ab21fc258f8f9236165c37e62db27d8 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@a95d79881ee8d7da8d65579948b296edfe6722c1 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/post-approval-changes@bd7b63896ab21fc258f8f9236165c37e62db27d8 + - uses: angular/dev-infra/github-actions/post-approval-changes@a95d79881ee8d7da8d65579948b296edfe6722c1 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index f9d5c858e006..d7b0d4f406a1 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@bd7b63896ab21fc258f8f9236165c37e62db27d8 + - uses: angular/dev-infra/github-actions/feature-request@a95d79881ee8d7da8d65579948b296edfe6722c1 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f65f1489ede9..c1ea47521a1d 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup ESLint Caching uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: @@ -54,7 +54,7 @@ jobs: - name: Run Validation run: yarn admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/linting/licenses@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Check tooling setup run: yarn check-tooling-setup - name: Check commit message @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -90,11 +90,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -155,12 +155,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@bd7b63896ab21fc258f8f9236165c37e62db27d8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/package.json b/package.json index a42849547a3d..c859b58ede7f 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "@ampproject/remapping": "2.3.0", "@angular/animations": "19.0.0-next.5", "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75", "@angular/cdk": "19.0.0-next.4", "@angular/common": "19.0.0-next.5", "@angular/compiler": "19.0.0-next.5", @@ -63,7 +63,7 @@ "@angular/forms": "19.0.0-next.5", "@angular/localize": "19.0.0-next.5", "@angular/material": "19.0.0-next.4", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887", "@angular/platform-browser": "19.0.0-next.5", "@angular/platform-browser-dynamic": "19.0.0-next.5", "@angular/platform-server": "19.0.0-next.5", diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index f41863a3a071..8f8fc5d4601d 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#e8fc0cfa142918f6c175f5bd648477195f2ad141", - "@angular/cdk": "github:angular/cdk-builds#baa15ee38919134c601d13b7fbbebbb13dcfa2c4", - "@angular/common": "github:angular/common-builds#1665f287f4c88ad9e99b2f8b4bf0076a688446da", - "@angular/compiler": "github:angular/compiler-builds#434424bd13b22d91eb31c4b72eed5e12113ec852", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#5cccd48bf518d5339fa5daf1aa563e1bfd0b7e43", - "@angular/core": "github:angular/core-builds#e52a2e54e562a3756aafdc1077922a8344789556", - "@angular/forms": "github:angular/forms-builds#2c5cc8716556c90237f9de24b62a7065355a2fd4", - "@angular/language-service": "github:angular/language-service-builds#944d7f0a9bd220f619cd85ed06ce3117cbcf3ec1", - "@angular/localize": "github:angular/localize-builds#fc1617e3d752e70e9b75b252d17d0ba1f8aa447a", - "@angular/material": "github:angular/material-builds#fe09474fbe1d63be84896cdd7d55af15e744de9b", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#285f82dd88f89faf3483a3008b5ce6aa2d3eef9b", - "@angular/platform-browser": "github:angular/platform-browser-builds#7cb34e9c1d0ac9a6ea8483af74b6a34c6905491e", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6e285bddb3c3098418f7004ec5ae230fad1cc50e", - "@angular/platform-server": "github:angular/platform-server-builds#6cc07caaad27efcec7602ec752f65d0392325c90", - "@angular/router": "github:angular/router-builds#d9636899fbd01efd83bd81f485f6d9430987d624", - "@angular/service-worker": "github:angular/service-worker-builds#42c11a7d2f4ffdd951e4647b86cb03958b4574e5" + "@angular/animations": "github:angular/animations-builds#28df2d170cf1dd7203ee92ef8214fd387c686de7", + "@angular/cdk": "github:angular/cdk-builds#3f688e74195a36b73626c3dedc31c87b0deb037e", + "@angular/common": "github:angular/common-builds#fcc314d38a2a432fa3a04e2e763d0ac47bfec42a", + "@angular/compiler": "github:angular/compiler-builds#969ce284e9546b7387066d1083b69416c6167875", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#be949b9df4de1f1bef704613217238674a7a8946", + "@angular/core": "github:angular/core-builds#e1c6544868898a6e7859acfb56ea14af8b70b60d", + "@angular/forms": "github:angular/forms-builds#ce874a51bec3c59c6f362cbbd3bf6fb8c137a0d0", + "@angular/language-service": "github:angular/language-service-builds#7b5b5dab5c58d1edc0c45d46cb954c672336a3b5", + "@angular/localize": "github:angular/localize-builds#1bf47cfe97ebebaffb68c52ec5ec8b75b5e4badf", + "@angular/material": "github:angular/material-builds#c074dbf9a39eef2fb1f356276b3d1fc772fcc6e0", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#1e1d54309f309179621d8e25c9ac452350ee586e", + "@angular/platform-browser": "github:angular/platform-browser-builds#eafe65a09330ccff9820ff1a269aeb935cd89ae7", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#dbbfa3a4683b3c835a999127a3b4c2fd1cb3939d", + "@angular/platform-server": "github:angular/platform-server-builds#13b48843a9ef0534edcb344c4029b7f41df86de1", + "@angular/router": "github:angular/router-builds#280576af9ca1513b2c6636ecce3ec50b33ee5fc8", + "@angular/service-worker": "github:angular/service-worker-builds#4c0ed6a83ea9ebd15b93699451668f4ea6302aa6" } } diff --git a/yarn.lock b/yarn.lock index ebd0b207bae4..cea09a092f8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -331,9 +331,9 @@ __metadata: languageName: node linkType: hard -"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929": - version: 0.0.0-bd7b63896ab21fc258f8f9236165c37e62db27d8 - resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=40c5080c52f4d14aa2b5083e42fe5cb0fea2f929" +"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75": + version: 0.0.0-a95d79881ee8d7da8d65579948b296edfe6722c1 + resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=3ca0e724cf24354bc2344b51cc0028a0ebeeed75" dependencies: "@angular/benchpress": "npm:0.3.0" "@angular/build": "npm:19.0.0-next.6" @@ -373,7 +373,7 @@ __metadata: dependenciesMeta: re2: built: false - checksum: 10c0/a536524457cefe742af6ccb3492bfe9698d71db10e6ad520dda2ae23685aa4cb98b1f091d37e750e2fe035c95b63b00c59b8235e00998e76fb11eac45be391da + checksum: 10c0/66a21a1951a6cde33590d3231d68f2b646a5f72ae424631dcd8d7d8700436e2625fbe67ed633e0983c37fa5c6a7e36cd318d215be4fa2ca2bc93af20bca4d0c7 languageName: node linkType: hard @@ -632,7 +632,7 @@ __metadata: "@ampproject/remapping": "npm:2.3.0" "@angular/animations": "npm:19.0.0-next.5" "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch" - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#40c5080c52f4d14aa2b5083e42fe5cb0fea2f929" + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75" "@angular/cdk": "npm:19.0.0-next.4" "@angular/common": "npm:19.0.0-next.5" "@angular/compiler": "npm:19.0.0-next.5" @@ -641,7 +641,7 @@ __metadata: "@angular/forms": "npm:19.0.0-next.5" "@angular/localize": "npm:19.0.0-next.5" "@angular/material": "npm:19.0.0-next.4" - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b" + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887" "@angular/platform-browser": "npm:19.0.0-next.5" "@angular/platform-browser-dynamic": "npm:19.0.0-next.5" "@angular/platform-server": "npm:19.0.0-next.5" @@ -850,9 +850,9 @@ __metadata: languageName: node linkType: hard -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#682b3d77e51c0c4fcb535bd6b147eb42a8738d7b": - version: 0.0.0-bd7b63896ab21fc258f8f9236165c37e62db27d8 - resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=682b3d77e51c0c4fcb535bd6b147eb42a8738d7b" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887": + version: 0.0.0-a95d79881ee8d7da8d65579948b296edfe6722c1 + resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=8b01aab7d66a133165744f0ef947d56015831887" dependencies: "@octokit/rest": "npm:21.0.2" "@types/semver": "npm:^7.3.6" @@ -866,7 +866,7 @@ __metadata: yaml: "npm:2.5.1" bin: ng-dev: ./bundles/cli.mjs - checksum: 10c0/df04f5e57e967813aa8d925619bdf979230bc405bc4cc9307910fb7335a4020112d8efb91f52941c9dd95d8d5b0a609f7255f6cd645cef11a18e28363b65cfaa + checksum: 10c0/d43435b1147323c2949f268abf4defbea0f00e1cfba5d43229de1dd86bf90f2ace9a57e988355206300c2106583d13f3ce88fd4d63347c13367b622bcbcadbf1 languageName: node linkType: hard From 09d2eb932875bc83e483cf64ca50e6dc4d4ad016 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 16 Sep 2024 16:15:35 +0000 Subject: [PATCH 43/53] build: lock file maintenance --- yarn.lock | 585 +++++++----------------------------------------------- 1 file changed, 77 insertions(+), 508 deletions(-) diff --git a/yarn.lock b/yarn.lock index cea09a092f8c..32e6e622761f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2888,9 +2888,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.11.0 - resolution: "@eslint-community/regexpp@npm:4.11.0" - checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8 languageName: node linkType: hard @@ -2990,28 +2990,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/core@npm:^9.1.0": - version: 9.1.0 - resolution: "@inquirer/core@npm:9.1.0" - dependencies: - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.2" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-spinners: "npm:^2.9.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/c86cbd1980788dee4151002ed717b5664a79eec1d925e1b38896bbad079647af5c423eaaa39a2291ba4fdf78a33c541ea3f69cbbf030f03815eb523fa05230f8 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.2.1": +"@inquirer/core@npm:^9.1.0, @inquirer/core@npm:^9.2.1": version: 9.2.1 resolution: "@inquirer/core@npm:9.2.1" dependencies: @@ -3053,13 +3032,6 @@ __metadata: languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.5": - version: 1.0.5 - resolution: "@inquirer/figures@npm:1.0.5" - checksum: 10c0/ec9ba23db42cb33fa18eb919abf2a18e750e739e64c1883ce4a98345cd5711c60cac12d1faf56a859f52d387deb221c8d3dfe60344ee07955a9a262f8b821fe3 - languageName: node - linkType: hard - "@inquirer/figures@npm:^1.0.6": version: 1.0.6 resolution: "@inquirer/figures@npm:1.0.6" @@ -3153,11 +3125,11 @@ __metadata: linkType: hard "@inquirer/type@npm:^1.5.1, @inquirer/type@npm:^1.5.3": - version: 1.5.3 - resolution: "@inquirer/type@npm:1.5.3" + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" dependencies: mute-stream: "npm:^1.0.0" - checksum: 10c0/da92a7410efcb20cf12422558fb8e00136e2ff1746ae1d17ea05511e77139bf2044527d37a70e77f188f158099f7751ed808ca3f82769cbe99c1052509481e95 + checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 languageName: node linkType: hard @@ -3394,17 +3366,6 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.29.6": - version: 7.29.6 - resolution: "@microsoft/api-extractor-model@npm:7.29.6" - dependencies: - "@microsoft/tsdoc": "npm:~0.15.0" - "@microsoft/tsdoc-config": "npm:~0.17.0" - "@rushstack/node-core-library": "npm:5.7.0" - checksum: 10c0/cdf7e69dc6bc04de4a814b2bc126cc4faa5cea5b9b4582f8baf9bd9bd105cc62d5e322c46c6221a8e0934d1539a820ef9f512c112cb16c1bbcc7b06f5e3ba5fd - languageName: node - linkType: hard - "@microsoft/api-extractor-model@npm:7.29.8": version: 7.29.8 resolution: "@microsoft/api-extractor-model@npm:7.29.8" @@ -3416,7 +3377,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor@npm:7.47.9": +"@microsoft/api-extractor@npm:7.47.9, @microsoft/api-extractor@npm:^7.24.2": version: 7.47.9 resolution: "@microsoft/api-extractor@npm:7.47.9" dependencies: @@ -3439,29 +3400,6 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.24.2": - version: 7.47.7 - resolution: "@microsoft/api-extractor@npm:7.47.7" - dependencies: - "@microsoft/api-extractor-model": "npm:7.29.6" - "@microsoft/tsdoc": "npm:~0.15.0" - "@microsoft/tsdoc-config": "npm:~0.17.0" - "@rushstack/node-core-library": "npm:5.7.0" - "@rushstack/rig-package": "npm:0.5.3" - "@rushstack/terminal": "npm:0.14.0" - "@rushstack/ts-command-line": "npm:4.22.6" - lodash: "npm:~4.17.15" - minimatch: "npm:~3.0.3" - resolve: "npm:~1.22.1" - semver: "npm:~7.5.4" - source-map: "npm:~0.6.1" - typescript: "npm:5.4.2" - bin: - api-extractor: bin/api-extractor - checksum: 10c0/f1121b8a2bd559c84d0397ce504561d138e7f1b6e56a0dbd9f71dadfbc8b129f34c512dbfc5f6554b4ca92df9fe00c47e0d7e175b9d6e02726b88ed84878e431 - languageName: node - linkType: hard - "@microsoft/tsdoc-config@npm:~0.17.0": version: 0.17.0 resolution: "@microsoft/tsdoc-config@npm:0.17.0" @@ -4089,13 +4027,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm-eabi@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.3" @@ -4103,13 +4034,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm64@npm:4.21.2" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-android-arm64@npm:4.21.3" @@ -4117,13 +4041,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-darwin-arm64@npm:4.21.3" @@ -4131,13 +4048,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-darwin-x64@npm:4.21.3" @@ -4145,13 +4055,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.3" @@ -4159,13 +4062,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.3" @@ -4173,13 +4069,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.3" @@ -4187,13 +4076,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.3" @@ -4201,13 +4083,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.3" @@ -4215,13 +4090,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.3" @@ -4229,13 +4097,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-s390x-gnu@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.3" @@ -4243,13 +4104,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.3" @@ -4257,13 +4111,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.3" @@ -4271,13 +4118,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.3" @@ -4285,13 +4125,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.3" @@ -4299,13 +4132,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.21.3": version: 4.21.3 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.3" @@ -4314,8 +4140,8 @@ __metadata: linkType: hard "@rollup/wasm-node@npm:^4.18.0": - version: 4.21.2 - resolution: "@rollup/wasm-node@npm:4.21.2" + version: 4.21.3 + resolution: "@rollup/wasm-node@npm:4.21.3" dependencies: "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" @@ -4324,7 +4150,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/905a5e00f95c3c8d977794d75fb5ad0a783d03e308a5d3782fc2c961b6de4df767f77d315e52218865252c48b09c0bdb0bacfd376b16f3b5920c603ac764267b + checksum: 10c0/e93e5ab3791e27b3c66c2aba6bff7723d207e496020f75e5fd5d39118ae62db9e1d4f0a9e17d888f54b465df421c84c5448678fa8f23dd81f86e42c2584af7aa languageName: node linkType: hard @@ -4335,27 +4161,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:5.7.0": - version: 5.7.0 - resolution: "@rushstack/node-core-library@npm:5.7.0" - dependencies: - ajv: "npm:~8.13.0" - ajv-draft-04: "npm:~1.0.0" - ajv-formats: "npm:~3.0.1" - fs-extra: "npm:~7.0.1" - import-lazy: "npm:~4.0.0" - jju: "npm:~1.4.0" - resolve: "npm:~1.22.1" - semver: "npm:~7.5.4" - peerDependencies: - "@types/node": "*" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10c0/8055c52a9658942a77d78afc5e6d6c6779e8f083024ec741b868da198ccd821a52e7566e848dade2fc8570c235210e114d53fe79d51aaf8d1649960828f73679 - languageName: node - linkType: hard - "@rushstack/node-core-library@npm:5.9.0": version: 5.9.0 resolution: "@rushstack/node-core-library@npm:5.9.0" @@ -4387,21 +4192,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/terminal@npm:0.14.0": - version: 0.14.0 - resolution: "@rushstack/terminal@npm:0.14.0" - dependencies: - "@rushstack/node-core-library": "npm:5.7.0" - supports-color: "npm:~8.1.1" - peerDependencies: - "@types/node": "*" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10c0/9fda5bc7d2c74d9ef52021163acb4a6ff26cc28e4935567c149158a01966051313d6785b5cf2dd9238404181b1766f253153ba0a5aaea4fb9f5c5bb9d708a10b - languageName: node - linkType: hard - "@rushstack/terminal@npm:0.14.2": version: 0.14.2 resolution: "@rushstack/terminal@npm:0.14.2" @@ -4417,18 +4207,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.22.6": - version: 4.22.6 - resolution: "@rushstack/ts-command-line@npm:4.22.6" - dependencies: - "@rushstack/terminal": "npm:0.14.0" - "@types/argparse": "npm:1.0.38" - argparse: "npm:~1.0.9" - string-argv: "npm:~0.3.1" - checksum: 10c0/44905de94dbfe4a9b27ce21fb09b50f92a637349989a61a9d0fee53f38f81d5b779e8cfa8f8a857d0d415db91557b687159522d6b3ecdaa3eccbbff76e608325 - languageName: node - linkType: hard - "@rushstack/ts-command-line@npm:4.22.8": version: 4.22.8 resolution: "@rushstack/ts-command-line@npm:4.22.8" @@ -5033,12 +4811,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:^22.5.2": - version: 22.5.4 - resolution: "@types/node@npm:22.5.4" +"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:^22.5.5": + version: 22.5.5 + resolution: "@types/node@npm:22.5.5" dependencies: undici-types: "npm:~6.19.2" - checksum: 10c0/b445daa7eecd761ad4d778b882d6ff7bcc3b4baad2086ea9804db7c5d4a4ab0298b00d7f5315fc640a73b5a1d52bbf9628e09c9fec0cf44dbf9b4df674a8717d + checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c languageName: node linkType: hard @@ -5058,15 +4836,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.5.5": - version: 22.5.5 - resolution: "@types/node@npm:22.5.5" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c - languageName: node - linkType: hard - "@types/npm-package-arg@npm:*, @types/npm-package-arg@npm:^6.1.0": version: 6.1.4 resolution: "@types/npm-package-arg@npm:6.1.4" @@ -5146,9 +4915,9 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 10c0/49c5ff75ca3adb18a1939310042d273c9fc55920861bd8e5100c8a923b3cda90d759e1a95e18334092da1c8f7b820084687770c83a1ccef04fb2c6908117c823 + version: 6.9.16 + resolution: "@types/qs@npm:6.9.16" + checksum: 10c0/a4e871b80fff623755e356fd1f225aea45ff7a29da30f99fddee1a05f4f5f33485b314ab5758145144ed45708f97e44595aa9a8368e9bbc083932f931b12dbb6 languageName: node linkType: hard @@ -6870,20 +6639,20 @@ __metadata: linkType: hard "bare-fs@npm:^2.1.1": - version: 2.3.3 - resolution: "bare-fs@npm:2.3.3" + version: 2.3.5 + resolution: "bare-fs@npm:2.3.5" dependencies: bare-events: "npm:^2.0.0" bare-path: "npm:^2.0.0" bare-stream: "npm:^2.0.0" - checksum: 10c0/64a1dbccf748b0652cc27215c452bec1bcd402204c494db60d3891712be58b46331e13f4019ffe78ff35128299a05ad192d51fad5e4e02feae9cc320e96573cd + checksum: 10c0/ff18cc9be7c557c38e0342681ba3672ae4b01e5696b567d4035e5995255dc6bc7d4df88ed210fa4d3eb940eb29512e924ebb42814c87fc59a2bee8cf83b7c2f9 languageName: node linkType: hard "bare-os@npm:^2.1.0": - version: 2.4.2 - resolution: "bare-os@npm:2.4.2" - checksum: 10c0/c80dc93b4960b39ab7bcc1867e9e4141d33aa51644697a93ce2606a76dd00aec1bd2661e6b1ef2381d79cbf45af5a1739c9e52d72402458f4aa2b51a1443c8ee + version: 2.4.4 + resolution: "bare-os@npm:2.4.4" + checksum: 10c0/e7d1a7b2100c05da8d25b60d0d48cf850c6f57064577a3f2f51cf18d417fbcfd6967ed2d8314320914ed69e0f2ebcf54eb1b36092dd172d8e8f969cf8cccf041 languageName: node linkType: hard @@ -6897,12 +6666,12 @@ __metadata: linkType: hard "bare-stream@npm:^2.0.0": - version: 2.2.1 - resolution: "bare-stream@npm:2.2.1" + version: 2.3.0 + resolution: "bare-stream@npm:2.3.0" dependencies: b4a: "npm:^1.6.6" - streamx: "npm:^2.18.0" - checksum: 10c0/fd1e33b147ba288d524f75ee2dec38c0ae34e38250c40d5261784fe02a059c819593f1fed701219690ca445ac35d6e924b154f882065995b76b4a801e3047b18 + streamx: "npm:^2.20.0" + checksum: 10c0/374a517542e6a0c3c07f3a1d567db612685e66708f79781112aa0e81c1f117ec561cc1ff3926144f15a2200316a77030c95dcc13a1b96d5303f0748798b764cf languageName: node linkType: hard @@ -7005,27 +6774,7 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.2, body-parser@npm:^1.19.0": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.5" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.11.0" - raw-body: "npm:2.5.2" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10c0/06f1438fff388a2e2354c96aa3ea8147b79bfcb1262dfcc2aae68ec13723d01d5781680657b74e9f83c808266d5baf52804032fbde2b7382b89bd8cdb273ace9 - languageName: node - linkType: hard - -"body-parser@npm:1.20.3": +"body-parser@npm:1.20.3, body-parser@npm:^1.19.0": version: 1.20.3 resolution: "body-parser@npm:1.20.3" dependencies: @@ -7359,9 +7108,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001659 - resolution: "caniuse-lite@npm:1.0.30001659" - checksum: 10c0/11dc1c0795505d5c629cdf02361d7d60249646a49ed2868997144c3d9c6b0c3e18d87f6ea2b48b6deed593c483271003cebca7dd805fbda96607a9b83899eeaa + version: 1.0.30001660 + resolution: "caniuse-lite@npm:1.0.30001660" + checksum: 10c0/d28900b56c597176d515c3175ca75c454f2d30cb2c09a44d7bdb009bb0c4d8a2557905adb77642889bbe9feb85fbfe9d974c8b8e53521fb4b50ee16ab246104e languageName: node linkType: hard @@ -7556,7 +7305,7 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0, cli-spinners@npm:^2.9.2": +"cli-spinners@npm:^2.5.0": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 @@ -8213,7 +7962,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.7, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": +"debug@npm:4, debug@npm:4.3.7, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -8661,9 +8410,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.4": - version: 1.5.18 - resolution: "electron-to-chromium@npm:1.5.18" - checksum: 10c0/2c553c4e7618e887398af0fb7ddd8055beb69d37a810ad73fcea0f3e9027f1fc879ef280151fb6bae8e5b961f5597452eafc1ae5a0adca5bd49211545a34afe7 + version: 1.5.23 + resolution: "electron-to-chromium@npm:1.5.23" + checksum: 10c0/a2f76d3ffae24635ff13597a7e4ddd73bd7ee2124e021d34a60faafc5a1afda567e6d26c0c84abc5c2d7622d9daf9bb25ed7dd2970019dcf4b9a28c02c13cab4 languageName: node linkType: hard @@ -9510,7 +9259,7 @@ __metadata: languageName: node linkType: hard -"express@npm:4.21.0": +"express@npm:4.21.0, express@npm:^4.19.2": version: 4.21.0 resolution: "express@npm:4.21.0" dependencies: @@ -9549,45 +9298,6 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.19.2": - version: 4.19.2 - resolution: "express@npm:4.19.2" - dependencies: - accepts: "npm:~1.3.8" - array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.2" - content-disposition: "npm:0.5.4" - content-type: "npm:~1.0.4" - cookie: "npm:0.6.0" - cookie-signature: "npm:1.0.6" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.1" - methods: "npm:~1.1.2" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.7" - proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" - range-parser: "npm:~1.2.1" - safe-buffer: "npm:5.2.1" - send: "npm:0.18.0" - serve-static: "npm:1.15.0" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - type-is: "npm:~1.6.18" - utils-merge: "npm:1.0.1" - vary: "npm:~1.1.2" - checksum: 10c0/e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb - languageName: node - linkType: hard - "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -9791,21 +9501,6 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" - dependencies: - debug: "npm:2.6.9" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - statuses: "npm:2.0.1" - unpipe: "npm:~1.0.0" - checksum: 10c0/64b7e5ff2ad1fcb14931cd012651631b721ce657da24aedb5650ddde9378bf8e95daa451da43398123f5de161a81e79ff5affe4f9f2a6d2df4a813d6d3e254b7 - languageName: node - linkType: hard - "finalhandler@npm:1.3.1": version: 1.3.1 resolution: "finalhandler@npm:1.3.1" @@ -12854,13 +12549,6 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 10c0/b67d07bd44cfc45cebdec349bb6e1f7b077ee2fd5beb15d1f7af073849208cb6f144fe403e29a36571baf3f4e86469ac39acf13c318381e958e186b2766f54ec - languageName: node - linkType: hard - "merge-descriptors@npm:1.0.3": version: 1.0.3 resolution: "merge-descriptors@npm:1.0.3" @@ -14298,13 +13986,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 10c0/50a1ddb1af41a9e68bd67ca8e331a705899d16fb720a1ea3a41e310480948387daf603abb14d7b0826c58f10146d49050a1291ba6a82b78a382d1c02c0b8f905 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -14645,7 +14326,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.47": +"postcss@npm:8.4.47, postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.43": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -14656,17 +14337,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.14, postcss@npm:^8.4.23, postcss@npm:^8.4.31, postcss@npm:^8.4.33, postcss@npm:^8.4.43": - version: 8.4.45 - resolution: "postcss@npm:8.4.45" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/ad6f8b9b1157d678560373696109745ab97a947d449f8a997acac41c7f1e4c0f3ca4b092d6df1387f430f2c9a319987b1780dbdc27e35800a88cde9b606c1e8f - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -14880,12 +14550,12 @@ __metadata: linkType: hard "pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" + version: 3.0.2 + resolution: "pump@npm:3.0.2" dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f languageName: node linkType: hard @@ -14933,16 +14603,16 @@ __metadata: linkType: hard "puppeteer-core@npm:^23.2.0": - version: 23.3.0 - resolution: "puppeteer-core@npm:23.3.0" + version: 23.3.1 + resolution: "puppeteer-core@npm:23.3.1" dependencies: "@puppeteer/browsers": "npm:2.4.0" chromium-bidi: "npm:0.6.5" - debug: "npm:^4.3.6" + debug: "npm:^4.3.7" devtools-protocol: "npm:0.0.1330662" typed-query-selector: "npm:^2.12.0" ws: "npm:^8.18.0" - checksum: 10c0/80d303de857f9d48e577bdc8289aa51767e190a3f45e8a81d2ea5e71d74b19aa2febc4580a8cd1ca472bf74ea207951a11d02e112187321c9624a30a3e4a3316 + checksum: 10c0/332033ef668150689c87f8cbce2991b868dde2d973053618d57a6dc53af4b264a31dd6ee2e3c4ce5af293e4628e0fda258fe2b5267ab7755c043a40ddc743b07 languageName: node linkType: hard @@ -14997,15 +14667,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: "npm:^1.0.4" - checksum: 10c0/4e4875e4d7c7c31c233d07a448e7e4650f456178b9dd3766b7cfa13158fdb24ecb8c4f059fa91e820dc6ab9f2d243721d071c9c0378892dcdad86e9e9a27c68f - languageName: node - linkType: hard - "qs@npm:6.13.0, qs@npm:^6.5.2": version: 6.13.0 resolution: "qs@npm:6.13.0" @@ -15219,11 +14880,11 @@ __metadata: linkType: hard "regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: "npm:^1.4.2" - checksum: 10c0/89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 languageName: node linkType: hard @@ -15513,7 +15174,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:4.21.3": +"rollup@npm:4.21.3, rollup@npm:^4.18.0, rollup@npm:^4.20.0, rollup@npm:^4.4.0": version: 4.21.3 resolution: "rollup@npm:4.21.3" dependencies: @@ -15576,69 +15237,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.18.0, rollup@npm:^4.20.0, rollup@npm:^4.4.0": - version: 4.21.2 - resolution: "rollup@npm:4.21.2" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.2" - "@rollup/rollup-android-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-arm64": "npm:4.21.2" - "@rollup/rollup-darwin-x64": "npm:4.21.2" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" - "@rollup/rollup-linux-x64-musl": "npm:4.21.2" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" - "@types/estree": "npm:1.0.5" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/c9d97f7a21cde110371b2e890a31a996fee09b81e639e79372b962a9638ae653d2d24186b94632fc5dfab8a0582e1d0639dfe34b8b75051facd86915a9585a5f - languageName: node - linkType: hard - "run-applescript@npm:^7.0.0": version: 7.0.0 resolution: "run-applescript@npm:7.0.0" @@ -15820,14 +15418,14 @@ __metadata: linkType: hard "selenium-webdriver@npm:^4.18.1": - version: 4.24.0 - resolution: "selenium-webdriver@npm:4.24.0" + version: 4.24.1 + resolution: "selenium-webdriver@npm:4.24.1" dependencies: "@bazel/runfiles": "npm:^5.8.1" jszip: "npm:^3.10.1" tmp: "npm:^0.2.3" ws: "npm:^8.18.0" - checksum: 10c0/a03f35969dfdc0835ffb75564425f230fc84abb157226ae3b3d207019cade15298a8bb0133ed3955f2f191ed1c526bf2ce6bfe5749c93d7ec159348ff566ab82 + checksum: 10c0/803b15c6584deb00f924892fcd61f296fdf15b5f4a0ad00ca6bf0206e54de5eff873338568d46a4bb1ced5f1c7bf3726c1a2ee41640601e8cd4b49a7894e22cd languageName: node linkType: hard @@ -15909,27 +15507,6 @@ __metadata: languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10c0/0eb134d6a51fc13bbcb976a1f4214ea1e33f242fae046efc311e80aff66c7a43603e26a79d9d06670283a13000e51be6e0a2cb80ff0942eaf9f1cd30b7ae736a - languageName: node - linkType: hard - "send@npm:0.19.0, send@npm:^0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -15987,18 +15564,6 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" - dependencies: - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.18.0" - checksum: 10c0/fa9f0e21a540a28f301258dfe1e57bb4f81cd460d28f0e973860477dd4acef946a1f41748b5bd41c73b621bea2029569c935faa38578fd34cd42a9b4947088ba - languageName: node - linkType: hard - "serve-static@npm:1.16.2": version: 1.16.2 resolution: "serve-static@npm:1.16.2" @@ -16315,7 +15880,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf @@ -16583,9 +16148,9 @@ __metadata: languageName: node linkType: hard -"streamx@npm:^2.15.0, streamx@npm:^2.18.0": - version: 2.20.0 - resolution: "streamx@npm:2.20.0" +"streamx@npm:^2.15.0, streamx@npm:^2.20.0": + version: 2.20.1 + resolution: "streamx@npm:2.20.1" dependencies: bare-events: "npm:^2.2.0" fast-fifo: "npm:^1.3.2" @@ -16594,7 +16159,7 @@ __metadata: dependenciesMeta: bare-events: optional: true - checksum: 10c0/135d94dca174c0d169416d28449cd6dd6f2c9bb9cf380f73072ba2ec08ab042748b60f522b94badbaef721328313a885a4b6c51c9d4fa6f3538da733c3399831 + checksum: 10c0/34ffa2ee9465d70e18c7e2ba70189720c166d150ab83eb7700304620fa23ff42a69cb37d712ea4b5fc6234d8e74346a88bb4baceb873c6b05e52ac420f8abb4d languageName: node linkType: hard @@ -16925,11 +16490,11 @@ __metadata: linkType: hard "text-decoder@npm:^1.1.0": - version: 1.1.1 - resolution: "text-decoder@npm:1.1.1" + version: 1.2.0 + resolution: "text-decoder@npm:1.2.0" dependencies: b4a: "npm:^1.6.4" - checksum: 10c0/e527d05454b59c0fa77456495de68c88e560a122de3dd28b3ebdbf81828aabeaa7e9bb8054b9eb52bc5029ccb5899ad04f466cbba3c53b2685270599d1710cee + checksum: 10c0/398171bef376e06864cd6ba24e0787cc626bebc84a1bbda758d06a6e9b729cc8613f7923dd0d294abd88e8bb5cd7261aad5fda7911fb87253fe71b2b5ac6e507 languageName: node linkType: hard @@ -17429,16 +16994,20 @@ __metadata: linkType: hard "ua-parser-js@npm:^0.7.30": - version: 0.7.38 - resolution: "ua-parser-js@npm:0.7.38" - checksum: 10c0/da963eae1618f0c60d0812851a4d478fb8bb127ee6e5c566b8dac27eeb25757d818d9ade2c312d73018f2bb3c3e629d26c066fcda3cb9d55a31289c9566198df + version: 0.7.39 + resolution: "ua-parser-js@npm:0.7.39" + bin: + ua-parser-js: script/cli.js + checksum: 10c0/5d28deda5e04589c90e67e033136c2ecec38ac6e89e32fd5eab9ef7255af5839c4310c5bbf7361020bba17e85ac56dcb094077be7b6d45a8d776cd3ffe148a8c languageName: node linkType: hard "ua-parser-js@npm:^1.0.33": - version: 1.0.38 - resolution: "ua-parser-js@npm:1.0.38" - checksum: 10c0/b1dd11b87e1784c79f7129e9aec679753fccf8a9b22f5202b79b19492635b5b46b779607a3cfae0270999a0d48da223bf94015642d2abee69d83c9069ab37bd0 + version: 1.0.39 + resolution: "ua-parser-js@npm:1.0.39" + bin: + ua-parser-js: script/cli.js + checksum: 10c0/c6452b0c683000f10975cb0a7e74cb1119ea95d4522ae85f396fa53b0b17884358a24ffdd86a66030c6b2981bdc502109a618c79fdaa217ee9032c9e46fcc78a languageName: node linkType: hard @@ -17508,9 +17077,9 @@ __metadata: linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 10c0/0fe812641bcfa3ae433025178a64afb5d9afebc21a922dafa7cba971deebb5e4a37350423890750132a85c936c290fb988146d0b1bd86838ad4897f4fc5bd0de + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 languageName: node linkType: hard @@ -17525,9 +17094,9 @@ __metadata: linkType: hard "unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 10c0/f5b9499b9e0ffdc6027b744d528f17ec27dd7c15da03254ed06851feec47e0531f20d410910c8a49af4a6a190f4978413794c8d75ce112950b56d583b5d5c7f2 + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d languageName: node linkType: hard From f346ee8a8819bb2eaf0ffb3d5523b00093be09e5 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 17 Sep 2024 13:20:27 +0000 Subject: [PATCH 44/53] feat(@angular/ssr): add `isMainModule` function Adds a new function `isMainModule` that checks if the current module is the main entry point of the application. This is useful to ensure that server listener handlers are only registered when the module is executed directly and not when it's imported as a dependency such as the dev-server. This prevents potential issues with multiple listeners being registered unintentionally. --- .../public-api/angular/ssr/node/index.api.md | 3 ++ packages/angular/ssr/node/public_api.ts | 1 + packages/angular/ssr/node/src/module.ts | 30 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 packages/angular/ssr/node/src/module.ts diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 01ced4fbe686..a15378457b4d 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -46,6 +46,9 @@ export interface CommonEngineRenderOptions { // @public export function createWebRequestFromNodeRequest(nodeRequest: IncomingMessage): Request; +// @public +export function isMainModule(url: string): boolean; + // @public export function writeResponseToNodeResponse(source: Response, destination: ServerResponse): Promise; diff --git a/packages/angular/ssr/node/public_api.ts b/packages/angular/ssr/node/public_api.ts index d8979687def9..721e6a4cf215 100644 --- a/packages/angular/ssr/node/public_api.ts +++ b/packages/angular/ssr/node/public_api.ts @@ -16,3 +16,4 @@ export { AngularNodeAppEngine } from './src/app-engine'; export { writeResponseToNodeResponse } from './src/response'; export { createWebRequestFromNodeRequest } from './src/request'; +export { isMainModule } from './src/module'; diff --git a/packages/angular/ssr/node/src/module.ts b/packages/angular/ssr/node/src/module.ts new file mode 100644 index 000000000000..f53943a89727 --- /dev/null +++ b/packages/angular/ssr/node/src/module.ts @@ -0,0 +1,30 @@ +/** + * @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.dev/license + */ + +import { argv } from 'node:process'; +import { fileURLToPath } from 'node:url'; + +/** + * Determines whether the provided URL represents the main entry point module. + * + * This function checks if the provided URL corresponds to the main ESM module being executed directly. + * It's useful for conditionally executing code that should only run when a module is the entry point, + * such as starting a server or initializing an application. + * + * It performs two key checks: + * 1. Verifies if the URL starts with 'file:', ensuring it is a local file. + * 2. Compares the URL's resolved file path with the first command-line argument (`process.argv[1]`), + * which points to the file being executed. + * + * @param url The URL of the module to check. This should typically be `import.meta.url`. + * @returns `true` if the provided URL represents the main entry point, otherwise `false`. + * @developerPreview + */ +export function isMainModule(url: string): boolean { + return url.startsWith('file:') && argv[1] === fileURLToPath(url); +} From ea4b99b36f0e84feb5cd80f0557c54b56bc79467 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 17 Sep 2024 09:34:51 +0000 Subject: [PATCH 45/53] refactor(@angular/ssr): add option to exclude fallback SSG routes from extraction This option allows validation during the build process to ensure that, when the output mode is set to static, no routes requiring server-side rendering are included. --- packages/angular/ssr/src/routes/ng-routes.ts | 50 ++++++++---- .../angular/ssr/test/routes/ng-routes_spec.ts | 81 +++++++++++++++++++ 2 files changed, 114 insertions(+), 17 deletions(-) diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index b4b3ddda39ce..e832be72a7c5 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -93,21 +93,25 @@ interface AngularRouterConfigResult { * @param options - The configuration options for traversing routes. * @returns An async iterable iterator yielding either route tree node metadata or an error object with an error message. */ -async function* traverseRoutesConfig({ - routes, - compiler, - parentInjector, - parentRoute, - serverConfigRouteTree, - invokeGetPrerenderParams, -}: { +async function* traverseRoutesConfig(options: { routes: Route[]; compiler: Compiler; parentInjector: Injector; parentRoute: string; serverConfigRouteTree: RouteTree | undefined; invokeGetPrerenderParams: boolean; + includePrerenderFallbackRoutes: boolean; }): AsyncIterableIterator { + const { + routes, + compiler, + parentInjector, + parentRoute, + serverConfigRouteTree, + invokeGetPrerenderParams, + includePrerenderFallbackRoutes, + } = options; + for (const route of routes) { try { const { path = '', redirectTo, loadChildren, children } = route; @@ -147,7 +151,12 @@ async function* traverseRoutesConfig({ yield { ...metadata, redirectTo: redirectToResolved }; } else if (metadata.renderMode === RenderMode.Prerender) { // Handle SSG routes - yield* handleSSGRoute(metadata, parentInjector, invokeGetPrerenderParams); + yield* handleSSGRoute( + metadata, + parentInjector, + invokeGetPrerenderParams, + includePrerenderFallbackRoutes, + ); } else { yield metadata; } @@ -155,12 +164,9 @@ async function* traverseRoutesConfig({ // Recursively process child routes if (children?.length) { yield* traverseRoutesConfig({ + ...options, routes: children, - compiler, - parentInjector, parentRoute: currentRoutePath, - serverConfigRouteTree, - invokeGetPrerenderParams, }); } @@ -175,12 +181,10 @@ async function* traverseRoutesConfig({ if (loadedChildRoutes) { const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes; yield* traverseRoutesConfig({ + ...options, routes: childRoutes, - compiler, parentInjector: injector, parentRoute: currentRoutePath, - serverConfigRouteTree, - invokeGetPrerenderParams, }); } } @@ -197,12 +201,14 @@ async function* traverseRoutesConfig({ * @param metadata - The metadata associated with the route tree node. * @param parentInjector - The dependency injection container for the parent route. * @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function. + * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. * @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors. */ async function* handleSSGRoute( metadata: ServerConfigRouteTreeNodeMetadata, parentInjector: Injector, invokeGetPrerenderParams: boolean, + includePrerenderFallbackRoutes: boolean, ): AsyncIterableIterator { if (metadata.renderMode !== RenderMode.Prerender) { throw new Error( @@ -267,7 +273,10 @@ async function* handleSSGRoute( } // Handle fallback render modes - if (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams) { + if ( + includePrerenderFallbackRoutes && + (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams) + ) { yield { ...meta, route: currentRoutePath, @@ -345,6 +354,8 @@ function buildServerConfigRouteTree(serverRoutesConfig: ServerRoute[]): { * for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction. * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes * to handle prerendering paths. Defaults to `false`. + * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`. + * * @returns A promise that resolves to an object of type `AngularRouterConfigResult` or errors. */ export async function getRoutesFromAngularRouterConfig( @@ -352,6 +363,7 @@ export async function getRoutesFromAngularRouterConfig( document: string, url: URL, invokeGetPrerenderParams = false, + includePrerenderFallbackRoutes = true, ): Promise { const { protocol, host } = url; @@ -418,6 +430,7 @@ export async function getRoutesFromAngularRouterConfig( parentRoute: '', serverConfigRouteTree, invokeGetPrerenderParams, + includePrerenderFallbackRoutes, }); for await (const result of traverseRoutes) { @@ -454,6 +467,7 @@ export async function getRoutesFromAngularRouterConfig( * If not provided, the default manifest is retrieved using `getAngularAppManifest()`. * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes * to handle prerendering paths. Defaults to `false`. + * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`. * * @returns A promise that resolves to an object containing: * - `routeTree`: A populated `RouteTree` containing all extracted routes from the Angular application. @@ -463,6 +477,7 @@ export async function extractRoutesAndCreateRouteTree( url: URL, manifest: AngularAppManifest = getAngularAppManifest(), invokeGetPrerenderParams = false, + includePrerenderFallbackRoutes = true, ): Promise<{ routeTree: RouteTree; errors: string[] }> { const routeTree = new RouteTree(); const document = await new ServerAssets(manifest).getIndexServerHtml(); @@ -472,6 +487,7 @@ export async function extractRoutesAndCreateRouteTree( document, url, invokeGetPrerenderParams, + includePrerenderFallbackRoutes, ); for (const { route, ...metadata } of routes) { diff --git a/packages/angular/ssr/test/routes/ng-routes_spec.ts b/packages/angular/ssr/test/routes/ng-routes_spec.ts index 556d051f7927..2a98a4130852 100644 --- a/packages/angular/ssr/test/routes/ng-routes_spec.ts +++ b/packages/angular/ssr/test/routes/ng-routes_spec.ts @@ -213,4 +213,85 @@ describe('extractRoutesAndCreateRouteTree', () => { { route: '/user/:id/role/:role', renderMode: RenderMode.Server }, ]); }); + + it('should not include fallback routes for SSG when `includePrerenderFallbackRoutes` is false', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'user/:id/role/:role', component: DummyComponent }, + ], + [ + { + path: 'user/:id/role/:role', + fallback: PrerenderFallback.Client, + renderMode: RenderMode.Prerender, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + { path: '**', renderMode: RenderMode.Server }, + ], + ); + + const { routeTree, errors } = await extractRoutesAndCreateRouteTree( + url, + /** manifest */ undefined, + /** invokeGetPrerenderParams */ true, + /** includePrerenderFallbackRoutes */ false, + ); + + expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Server }, + { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, + { + route: '/user/jane/role/writer', + renderMode: RenderMode.Prerender, + }, + ]); + }); + + it('should include fallback routes for SSG when `includePrerenderFallbackRoutes` is true', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'user/:id/role/:role', component: DummyComponent }, + ], + [ + { + path: 'user/:id/role/:role', + renderMode: RenderMode.Prerender, + fallback: PrerenderFallback.Client, + async getPrerenderParams() { + return [ + { id: 'joe', role: 'admin' }, + { id: 'jane', role: 'writer' }, + ]; + }, + }, + { path: '**', renderMode: RenderMode.Server }, + ], + ); + + const { routeTree, errors } = await extractRoutesAndCreateRouteTree( + url, + /** manifest */ undefined, + /** invokeGetPrerenderParams */ true, + /** includePrerenderFallbackRoutes */ true, + ); + + expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toEqual([ + { route: '/home', renderMode: RenderMode.Server }, + { route: '/user/joe/role/admin', renderMode: RenderMode.Prerender }, + { + route: '/user/jane/role/writer', + renderMode: RenderMode.Prerender, + }, + { route: '/user/:id/role/:role', renderMode: RenderMode.Client }, + ]); + }); }); From f249e7e856bf16e8c5f154fdb8aff36421649a1b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:36:21 -0400 Subject: [PATCH 46/53] perf(@angular/cli): enable Node.js compile code cache when available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Angular CLI will now enable the Node.js compile cache when available for use. Node.js v22.8 and higher currently provide support for this feature. The compile cache stores the v8 intermediate forms of JavaScript code for the Angular CLI itself. This provides a speed up to initialization on subsequent uses the Angular CLI. The Node.js cache is stored in a temporary directory in a globally accessible location so that all Node.js instances of a compatible version can share the cache. The code cache can be disabled if preferred via `NODE_DISABLE_COMPILE_CACHE=1`. Based on initial profiling, this change provides an ~6% production build time improvement for a newly generated project once the cache is available. ``` Benchmark 1: NODE_DISABLE_COMPILE_CACHE=1 node ./node_modules/.bin/ng build Time (mean ± σ): 2.617 s ± 0.016 s [User: 3.795 s, System: 1.284 s] Range (min … max): 2.597 s … 2.640 s 10 runs Benchmark 2: node ./node_modules/.bin/ng build Time (mean ± σ): 2.475 s ± 0.017 s [User: 3.555 s, System: 1.354 s] Range (min … max): 2.454 s … 2.510 s 10 runs Summary node ./node_modules/.bin/ng build ran 1.06 ± 0.01 times faster than NODE_DISABLE_COMPILE_CACHE=1 node ./node_modules/.bin/ng build ``` --- .../compilation/parallel-compilation.ts | 11 ++--- .../build/src/tools/esbuild/i18n-inliner.ts | 7 ++- .../tools/esbuild/javascript-transformer.ts | 12 ++--- .../build/src/tools/sass/sass-service.ts | 15 ++----- packages/angular/build/src/typings.d.ts | 7 +++ .../src/utils/server-rendering/prerender.ts | 8 ++-- .../angular/build/src/utils/worker-pool.ts | 44 +++++++++++++++++++ packages/angular/cli/bin/bootstrap.js | 14 +++++- 8 files changed, 81 insertions(+), 37 deletions(-) create mode 100644 packages/angular/build/src/utils/worker-pool.ts diff --git a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts index 225aa9eb1fa3..434ca958b4d1 100644 --- a/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/parallel-compilation.ts @@ -10,8 +10,8 @@ import type { CompilerOptions } from '@angular/compiler-cli'; import type { PartialMessage } from 'esbuild'; import { createRequire } from 'node:module'; import { MessageChannel } from 'node:worker_threads'; -import Piscina from 'piscina'; import type { SourceFile } from 'typescript'; +import { WorkerPool } from '../../../utils/worker-pool'; import type { AngularHostOptions } from '../angular-host'; import { AngularCompilation, DiagnosticModes, EmitFileResult } from './angular-compilation'; @@ -24,7 +24,7 @@ import { AngularCompilation, DiagnosticModes, EmitFileResult } from './angular-c * main Node.js CLI process memory settings with large application code sizes. */ export class ParallelCompilation extends AngularCompilation { - readonly #worker: Piscina; + readonly #worker: WorkerPool; constructor(readonly jit: boolean) { super(); @@ -32,15 +32,10 @@ export class ParallelCompilation extends AngularCompilation { // TODO: Convert to import.meta usage during ESM transition const localRequire = createRequire(__filename); - this.#worker = new Piscina({ - minThreads: 1, + this.#worker = new WorkerPool({ maxThreads: 1, idleTimeout: Infinity, - // Web containers do not support transferable objects with receiveOnMessagePort which - // is used when the Atomics based wait loop is enable. - useAtomics: !process.versions.webcontainer, filename: localRequire.resolve('./parallel-worker'), - recordTiming: false, }); } diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts index b1714efd459f..3075595aee87 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts @@ -7,7 +7,7 @@ */ import assert from 'node:assert'; -import Piscina from 'piscina'; +import { WorkerPool } from '../../utils/worker-pool'; import { BuildOutputFile, BuildOutputFileType } from './bundler-context'; import { createOutputFile } from './utils'; @@ -33,7 +33,7 @@ export interface I18nInlinerOptions { * localize function (`$localize`). */ export class I18nInliner { - #workerPool: Piscina; + #workerPool: WorkerPool; readonly #localizeFiles: ReadonlyMap; readonly #unmodifiedFiles: Array; readonly #fileToType = new Map(); @@ -88,7 +88,7 @@ export class I18nInliner { this.#localizeFiles = files; - this.#workerPool = new Piscina({ + this.#workerPool = new WorkerPool({ filename: require.resolve('./i18n-inliner-worker'), maxThreads, // Extract options to ensure only the named options are serialized and sent to the worker @@ -97,7 +97,6 @@ export class I18nInliner { shouldOptimize: options.shouldOptimize, files, }, - recordTiming: false, }); } diff --git a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts index ce4b0aa91356..f8445ccbef03 100644 --- a/packages/angular/build/src/tools/esbuild/javascript-transformer.ts +++ b/packages/angular/build/src/tools/esbuild/javascript-transformer.ts @@ -8,7 +8,7 @@ import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; -import Piscina from 'piscina'; +import { WorkerPool } from '../../utils/worker-pool'; import { Cache } from './cache'; /** @@ -29,7 +29,7 @@ export interface JavaScriptTransformerOptions { * and advanced optimizations. */ export class JavaScriptTransformer { - #workerPool: Piscina | undefined; + #workerPool: WorkerPool | undefined; #commonOptions: Required; #fileCacheKeyBase: Uint8Array; @@ -54,14 +54,10 @@ export class JavaScriptTransformer { this.#fileCacheKeyBase = Buffer.from(JSON.stringify(this.#commonOptions), 'utf-8'); } - #ensureWorkerPool(): Piscina { - this.#workerPool ??= new Piscina({ + #ensureWorkerPool(): WorkerPool { + this.#workerPool ??= new WorkerPool({ filename: require.resolve('./javascript-transformer-worker'), - minThreads: 1, maxThreads: this.maxThreads, - // Shutdown idle threads after 1 second of inactivity - idleTimeout: 1000, - recordTiming: false, }); return this.#workerPool; diff --git a/packages/angular/build/src/tools/sass/sass-service.ts b/packages/angular/build/src/tools/sass/sass-service.ts index 3e54e0ec1520..2df6f85f7a52 100644 --- a/packages/angular/build/src/tools/sass/sass-service.ts +++ b/packages/angular/build/src/tools/sass/sass-service.ts @@ -9,7 +9,6 @@ import assert from 'node:assert'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { MessageChannel } from 'node:worker_threads'; -import { Piscina } from 'piscina'; import type { CanonicalizeContext, CompileResult, @@ -22,6 +21,7 @@ import type { StringOptions, } from 'sass'; import { maxWorkers } from '../../utils/environment-options'; +import { WorkerPool } from '../../utils/worker-pool'; // Polyfill Symbol.dispose if not present // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -84,24 +84,17 @@ interface RenderResponseMessage { * the worker which can be up to two times faster than the asynchronous variant. */ export class SassWorkerImplementation { - #workerPool: Piscina | undefined; + #workerPool: WorkerPool | undefined; constructor( private readonly rebase = false, readonly maxThreads = MAX_RENDER_WORKERS, ) {} - #ensureWorkerPool(): Piscina { - this.#workerPool ??= new Piscina({ + #ensureWorkerPool(): WorkerPool { + this.#workerPool ??= new WorkerPool({ filename: require.resolve('./worker'), - minThreads: 1, maxThreads: this.maxThreads, - // Web containers do not support transferable objects with receiveOnMessagePort which - // is used when the Atomics based wait loop is enable. - useAtomics: !process.versions.webcontainer, - // Shutdown idle threads after 1 second of inactivity - idleTimeout: 1000, - recordTiming: false, }); return this.#workerPool; diff --git a/packages/angular/build/src/typings.d.ts b/packages/angular/build/src/typings.d.ts index c784b3c4220a..7eaadcafc536 100644 --- a/packages/angular/build/src/typings.d.ts +++ b/packages/angular/build/src/typings.d.ts @@ -17,3 +17,10 @@ declare module 'esbuild' { export * from 'esbuild-wasm'; } + +/** + * Augment the Node.js module builtin types to support the v22.8+ compile cache functions + */ +declare module 'node:module' { + function getCompileCacheDir(): string | undefined; +} diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index 1b53fd9ca6d9..55fec73b5210 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -9,10 +9,10 @@ import { readFile } from 'node:fs/promises'; import { extname, join, posix } from 'node:path'; import { pathToFileURL } from 'node:url'; -import Piscina from 'piscina'; import { BuildOutputFile, BuildOutputFileType } from '../../tools/esbuild/bundler-context'; import { BuildOutputAsset } from '../../tools/esbuild/bundler-execution-result'; import { urlJoin } from '../url'; +import { WorkerPool } from '../worker-pool'; import type { RenderWorkerData } from './render-worker'; import type { RoutersExtractorWorkerResult, @@ -188,7 +188,7 @@ async function renderPages( workerExecArgv.push('--enable-source-maps'); } - const renderWorker = new Piscina({ + const renderWorker = new WorkerPool({ filename: require.resolve('./render-worker'), maxThreads: Math.min(allRoutes.size, maxThreads), workerData: { @@ -197,7 +197,6 @@ async function renderPages( assetFiles: assetFilesForWorker, } as RenderWorkerData, execArgv: workerExecArgv, - recordTiming: false, }); try { @@ -286,7 +285,7 @@ async function getAllRoutes( workerExecArgv.push('--enable-source-maps'); } - const renderWorker = new Piscina({ + const renderWorker = new WorkerPool({ filename: require.resolve('./routes-extractor-worker'), maxThreads: 1, workerData: { @@ -295,7 +294,6 @@ async function getAllRoutes( assetFiles: assetFilesForWorker, } as RoutesExtractorWorkerData, execArgv: workerExecArgv, - recordTiming: false, }); const errors: string[] = []; diff --git a/packages/angular/build/src/utils/worker-pool.ts b/packages/angular/build/src/utils/worker-pool.ts new file mode 100644 index 000000000000..ca35f7edb46b --- /dev/null +++ b/packages/angular/build/src/utils/worker-pool.ts @@ -0,0 +1,44 @@ +/** + * @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.dev/license + */ + +import { getCompileCacheDir } from 'node:module'; +import { Piscina } from 'piscina'; + +export type WorkerPoolOptions = ConstructorParameters[0]; + +export class WorkerPool extends Piscina { + constructor(options: WorkerPoolOptions) { + const piscinaOptions: WorkerPoolOptions = { + minThreads: 1, + idleTimeout: 1000, + // Web containers do not support transferable objects with receiveOnMessagePort which + // is used when the Atomics based wait loop is enable. + useAtomics: !process.versions.webcontainer, + recordTiming: false, + ...options, + }; + + // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+). + // Skip if running inside Bazel via a RUNFILES environment variable check. The cache does not work + // well with Bazel's hermeticity requirements. + const compileCacheDirectory = process.env['RUNFILES'] ? undefined : getCompileCacheDir?.(); + if (compileCacheDirectory) { + if (typeof piscinaOptions.env === 'object') { + piscinaOptions.env['NODE_COMPILE_CACHE'] = compileCacheDirectory; + } else { + // Default behavior of `env` option is to copy current process values + piscinaOptions.env = { + ...process.env, + 'NODE_COMPILE_CACHE': compileCacheDirectory, + }; + } + } + + super(piscinaOptions); + } +} diff --git a/packages/angular/cli/bin/bootstrap.js b/packages/angular/cli/bin/bootstrap.js index 96b978296dcc..1282f906aef2 100644 --- a/packages/angular/cli/bin/bootstrap.js +++ b/packages/angular/cli/bin/bootstrap.js @@ -18,4 +18,16 @@ * range. */ -import('../lib/init.js'); +// Enable on-disk code caching if available (Node.js 22.8+) +// Skip if running inside Bazel via a RUNFILES environment variable check. The cache does not work +// well with Bazel's hermeticity requirements. +if (!process.env['RUNFILES']) { + try { + const { enableCompileCache } = require('node:module'); + + enableCompileCache?.(); + } catch {} +} + +// Initialize the Angular CLI +void import('../lib/init.js'); From 33e6cb0d6bc9f36f2f110d43bc77a927d14e1cb8 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 17 Sep 2024 20:32:43 -0400 Subject: [PATCH 47/53] test: ensure localize package is not initially present in E2E test --- tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts index 7c6bf4c21f4c..0b2321c0321f 100644 --- a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts +++ b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts @@ -27,6 +27,9 @@ export default async function () { `, ); + // Ensure localize package is not present initially + await uninstallPackage('@angular/localize'); + // Should fail if `@angular/localize` is missing const { message: message1 } = await expectToFail(() => ng('extract-i18n')); if (!message1.includes(`i18n extraction requires the '@angular/localize' package.`)) { From f6b7cd925dacf0ae34cb8e49b4deaf2e5c52ccd4 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:22:45 -0400 Subject: [PATCH 48/53] fix(@angular/build): support HTTP HEAD requests for virtual output files When using the development server, HTTP HEAD requests will now correctly respond for the virtual output files generated from the Angular build system. Previously Vite only handled GET requests for the files. While HEAD requests are not common in development workflows, it can be needed in more complex cases with additional servers/proxies/etc. during development. --- .../vite/middlewares/assets-middleware.ts | 6 +++++ .../e2e/tests/commands/serve/head-request.ts | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/legacy-cli/e2e/tests/commands/serve/head-request.ts diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index b282831210f9..4042dad9c216 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -63,6 +63,12 @@ export function createAngularAssetsMiddleware( return; } + // Support HTTP HEAD requests for the virtual output files from the Angular build + if (req.method === 'HEAD' && outputFiles.get(pathname)?.servable) { + // While a GET will also generate content, the rest of the response is equivalent + req.method = 'GET'; + } + // Resource files are handled directly. // Global stylesheets (CSS files) are currently considered resources to workaround // dev server sourcemap issues with stylesheets. diff --git a/tests/legacy-cli/e2e/tests/commands/serve/head-request.ts b/tests/legacy-cli/e2e/tests/commands/serve/head-request.ts new file mode 100644 index 000000000000..82ba370a0743 --- /dev/null +++ b/tests/legacy-cli/e2e/tests/commands/serve/head-request.ts @@ -0,0 +1,25 @@ +import { ngServe } from '../../../utils/project'; + +export default async function () { + const port = await ngServe(); + // HTML + await checkHeadForUrl(`http://localhost:${port}/index.html`); + // Generated JS + await checkHeadForUrl(`http://localhost:${port}/main.js`); + // Generated CSS + await checkHeadForUrl(`http://localhost:${port}/styles.css`); + // Configured asset + await checkHeadForUrl(`http://localhost:${port}/favicon.ico`); +} + +async function checkHeadForUrl(url: string): Promise { + const result = await fetch(url, { method: 'HEAD' }); + const content = await result.blob(); + + if (content.size !== 0) { + throw new Error(`Expected "size" to be "0" but got "${content.size}".`); + } + if (result.status !== 200) { + throw new Error(`Expected "status" to be "200" but got "${result.status}".`); + } +} From a3bbe0e585c4b12e6ba417cb7874011f229d542d Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 17 Sep 2024 17:42:49 +0200 Subject: [PATCH 49/53] refactor(@angular-devkit/core): fix up internal typings Resolves some type errors that showed up internally. --- .../angular_devkit/core/index.api.md | 6 +++--- package.json | 3 ++- .../core/src/utils/partially-ordered-set.ts | 6 +++--- .../core/src/workspace/definitions.ts | 8 ++++---- yarn.lock | 20 ------------------- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/goldens/public-api/angular_devkit/core/index.api.md b/goldens/public-api/angular_devkit/core/index.api.md index 6dfb312f350e..fe8b609ccf68 100644 --- a/goldens/public-api/angular_devkit/core/index.api.md +++ b/goldens/public-api/angular_devkit/core/index.api.md @@ -564,15 +564,15 @@ export class PartiallyOrderedSet implements Set { clear(): void; // (undocumented) delete(item: T): boolean; - entries(): IterableIterator<[T, T]>; + entries(): SetIterator<[T, T]>; // (undocumented) forEach(callbackfn: (value: T, value2: T, set: PartiallyOrderedSet) => void, thisArg?: any): void; // (undocumented) has(item: T): boolean; - keys(): IterableIterator; + keys(): SetIterator; // (undocumented) get size(): number; - values(): IterableIterator; + values(): SetIterator; } // @public diff --git a/package.json b/package.json index c859b58ede7f..fe574445c862 100644 --- a/package.json +++ b/package.json @@ -224,6 +224,7 @@ } }, "resolutions": { - "@bazel/concatjs@npm:5.8.1": "patch:@bazel/concatjs@npm%3A5.8.1#~/.yarn/patches/@bazel-concatjs-npm-5.8.1-1bf81df846.patch" + "@bazel/concatjs@npm:5.8.1": "patch:@bazel/concatjs@npm%3A5.8.1#~/.yarn/patches/@bazel-concatjs-npm-5.8.1-1bf81df846.patch", + "@microsoft/api-extractor/typescript": "5.6.2" } } diff --git a/packages/angular_devkit/core/src/utils/partially-ordered-set.ts b/packages/angular_devkit/core/src/utils/partially-ordered-set.ts index 1ab59d9ec828..41b68170f35e 100644 --- a/packages/angular_devkit/core/src/utils/partially-ordered-set.ts +++ b/packages/angular_devkit/core/src/utils/partially-ordered-set.ts @@ -51,7 +51,7 @@ export class PartiallyOrderedSet implements Set { /** * Returns an iterable of [v,v] pairs for every value `v` in the set. */ - *entries(): IterableIterator<[T, T]> { + *entries(): SetIterator<[T, T]> { for (const item of this) { yield [item, item]; } @@ -60,14 +60,14 @@ export class PartiallyOrderedSet implements Set { /** * Despite its name, returns an iterable of the values in the set, */ - keys(): IterableIterator { + keys(): SetIterator { return this.values(); } /** * Returns an iterable of values in the set. */ - values(): IterableIterator { + values(): SetIterator { return this[Symbol.iterator](); } diff --git a/packages/angular_devkit/core/src/workspace/definitions.ts b/packages/angular_devkit/core/src/workspace/definitions.ts index e133148c33e0..dc3bf4ab4608 100644 --- a/packages/angular_devkit/core/src/workspace/definitions.ts +++ b/packages/angular_devkit/core/src/workspace/definitions.ts @@ -85,19 +85,19 @@ class DefinitionCollection implements ReadonlyMap { return this._map.size; } - [Symbol.iterator](): IterableIterator<[string, V]> { + [Symbol.iterator](): MapIterator<[string, V]> { return this._map[Symbol.iterator](); } - entries(): IterableIterator<[string, V]> { + entries(): MapIterator<[string, V]> { return this._map.entries(); } - keys(): IterableIterator { + keys(): MapIterator { return this._map.keys(); } - values(): IterableIterator { + values(): MapIterator { return this._map.values(); } } diff --git a/yarn.lock b/yarn.lock index 32e6e622761f..478c60ea0a77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16919,16 +16919,6 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.4.2": - version: 5.4.2 - resolution: "typescript@npm:5.4.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/583ff68cafb0c076695f72d61df6feee71689568179fb0d3a4834dac343df6b6ed7cf7b6f6c801fa52d43cd1d324e2f2d8ae4497b09f9e6cfe3d80a6d6c9ca52 - languageName: node - linkType: hard - "typescript@npm:5.6.2": version: 5.6.2 resolution: "typescript@npm:5.6.2" @@ -16949,16 +16939,6 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.4.2#optional!builtin": - version: 5.4.2 - resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=5adc0c" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/fcf6658073d07283910d9a0e04b1d5d0ebc822c04dbb7abdd74c3151c7aa92fcddbac7d799404e358197222006ccdc4c0db219d223d2ee4ccd9e2b01333b49be - languageName: node - linkType: hard - "typescript@patch:typescript@npm%3A5.6.2#optional!builtin": version: 5.6.2 resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=74658d" From bd782dbe369eec047df4b4bf8a9fbf52b29c43a1 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 18 Sep 2024 10:09:57 +0000 Subject: [PATCH 50/53] build: update all non-major dependencies --- package.json | 16 +- packages/angular/build/package.json | 8 +- .../angular_devkit/build_angular/package.json | 10 +- yarn.lock | 426 ++++++++++++++---- 4 files changed, 364 insertions(+), 96 deletions(-) diff --git a/package.json b/package.json index fe574445c862..a111e3b564c2 100644 --- a/package.json +++ b/package.json @@ -114,8 +114,8 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.5.0", - "@typescript-eslint/parser": "8.5.0", + "@typescript-eslint/eslint-plugin": "8.6.0", + "@typescript-eslint/parser": "8.6.0", "@vitejs/plugin-basic-ssl": "1.1.0", "@web/test-runner": "^0.19.0", "@yarnpkg/lockfile": "1.1.0", @@ -123,7 +123,7 @@ "ajv-formats": "3.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "browser-sync": "3.0.2", "browserslist": "^4.21.5", "buffer": "6.0.3", @@ -160,7 +160,7 @@ "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", "listr2": "8.2.4", - "lmdb": "3.1.1", + "lmdb": "3.1.2", "loader-utils": "3.3.1", "lodash": "^4.17.21", "magic-string": "0.30.11", @@ -175,7 +175,7 @@ "pacote": "18.0.6", "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", - "piscina": "4.6.1", + "piscina": "4.7.0", "postcss": "8.4.47", "postcss-loader": "8.1.1", "prettier": "^3.0.0", @@ -186,7 +186,7 @@ "rollup": "4.21.3", "rollup-plugin-sourcemaps": "^0.6.0", "rxjs": "7.8.1", - "sass": "1.78.0", + "sass": "1.79.1", "sass-loader": "16.0.1", "semver": "7.6.3", "shelljs": "^0.8.5", @@ -195,7 +195,7 @@ "source-map-support": "0.5.21", "symbol-observable": "4.0.0", "tar": "^6.1.6", - "terser": "5.32.0", + "terser": "5.33.0", "tree-kill": "1.2.2", "ts-node": "^10.9.1", "tslib": "2.7.0", @@ -204,7 +204,7 @@ "unenv": "^1.10.0", "verdaccio": "5.32.2", "verdaccio-auth-memory": "^10.0.0", - "vite": "5.4.5", + "vite": "5.4.6", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index cc45b68c33ca..cf5bf36bab9d 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -32,16 +32,16 @@ "fast-glob": "3.3.2", "https-proxy-agent": "7.0.5", "listr2": "8.2.4", - "lmdb": "3.1.1", + "lmdb": "3.1.2", "magic-string": "0.30.11", "mrmime": "2.0.0", "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", - "piscina": "4.6.1", + "piscina": "4.7.0", "rollup": "4.21.3", - "sass": "1.78.0", + "sass": "1.79.1", "semver": "7.6.3", - "vite": "5.4.5", + "vite": "5.4.6", "watchpack": "2.4.2" }, "peerDependencies": { diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index da3cd8dec434..74468e35991e 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -25,7 +25,7 @@ "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "browserslist": "^4.21.5", "copy-webpack-plugin": "12.0.2", "critters": "0.0.24", @@ -48,20 +48,20 @@ "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", - "piscina": "4.6.1", + "piscina": "4.7.0", "postcss": "8.4.47", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.78.0", + "sass": "1.79.1", "sass-loader": "16.0.1", "semver": "7.6.3", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.32.0", + "terser": "5.33.0", "tree-kill": "1.2.2", "tslib": "2.7.0", - "vite": "5.4.5", + "vite": "5.4.6", "watchpack": "2.4.2", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", diff --git a/yarn.lock b/yarn.lock index 478c60ea0a77..a91c13d4c4d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,7 +78,7 @@ __metadata: "@vitejs/plugin-basic-ssl": "npm:1.1.0" ansi-colors: "npm:4.1.3" autoprefixer: "npm:10.4.20" - babel-loader: "npm:9.1.3" + babel-loader: "npm:9.2.1" browserslist: "npm:^4.21.5" copy-webpack-plugin: "npm:12.0.2" critters: "npm:0.0.24" @@ -102,21 +102,21 @@ __metadata: ora: "npm:5.4.1" parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" - piscina: "npm:4.6.1" + piscina: "npm:4.7.0" postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" resolve-url-loader: "npm:5.0.0" rxjs: "npm:7.8.1" - sass: "npm:1.78.0" + sass: "npm:1.79.1" sass-loader: "npm:16.0.1" semver: "npm:7.6.3" source-map-loader: "npm:5.0.0" source-map-support: "npm:0.5.21" - terser: "npm:5.32.0" + terser: "npm:5.33.0" tree-kill: "npm:1.2.2" tslib: "npm:2.7.0" undici: "npm:6.19.8" - vite: "npm:5.4.5" + vite: "npm:5.4.6" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -395,16 +395,16 @@ __metadata: fast-glob: "npm:3.3.2" https-proxy-agent: "npm:7.0.5" listr2: "npm:8.2.4" - lmdb: "npm:3.1.1" + lmdb: "npm:3.1.2" magic-string: "npm:0.30.11" mrmime: "npm:2.0.0" parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" - piscina: "npm:4.6.1" + piscina: "npm:4.7.0" rollup: "npm:4.21.3" - sass: "npm:1.78.0" + sass: "npm:1.79.1" semver: "npm:7.6.3" - vite: "npm:5.4.5" + vite: "npm:5.4.6" watchpack: "npm:2.4.2" peerDependencies: "@angular/compiler": ^19.0.0-next.0 @@ -692,8 +692,8 @@ __metadata: "@types/yargs": "npm:^17.0.20" "@types/yargs-parser": "npm:^21.0.0" "@types/yarnpkg__lockfile": "npm:^1.1.5" - "@typescript-eslint/eslint-plugin": "npm:8.5.0" - "@typescript-eslint/parser": "npm:8.5.0" + "@typescript-eslint/eslint-plugin": "npm:8.6.0" + "@typescript-eslint/parser": "npm:8.6.0" "@vitejs/plugin-basic-ssl": "npm:1.1.0" "@web/test-runner": "npm:^0.19.0" "@yarnpkg/lockfile": "npm:1.1.0" @@ -701,7 +701,7 @@ __metadata: ajv-formats: "npm:3.0.1" ansi-colors: "npm:4.1.3" autoprefixer: "npm:10.4.20" - babel-loader: "npm:9.1.3" + babel-loader: "npm:9.2.1" browser-sync: "npm:3.0.2" browserslist: "npm:^4.21.5" buffer: "npm:6.0.3" @@ -738,7 +738,7 @@ __metadata: less-loader: "npm:12.2.0" license-webpack-plugin: "npm:4.0.2" listr2: "npm:8.2.4" - lmdb: "npm:3.1.1" + lmdb: "npm:3.1.2" loader-utils: "npm:3.3.1" lodash: "npm:^4.17.21" magic-string: "npm:0.30.11" @@ -753,7 +753,7 @@ __metadata: pacote: "npm:18.0.6" parse5-html-rewriting-stream: "npm:7.0.0" picomatch: "npm:4.0.2" - piscina: "npm:4.6.1" + piscina: "npm:4.7.0" postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" prettier: "npm:^3.0.0" @@ -764,7 +764,7 @@ __metadata: rollup: "npm:4.21.3" rollup-plugin-sourcemaps: "npm:^0.6.0" rxjs: "npm:7.8.1" - sass: "npm:1.78.0" + sass: "npm:1.79.1" sass-loader: "npm:16.0.1" semver: "npm:7.6.3" shelljs: "npm:^0.8.5" @@ -773,7 +773,7 @@ __metadata: source-map-support: "npm:0.5.21" symbol-observable: "npm:4.0.0" tar: "npm:^6.1.6" - terser: "npm:5.32.0" + terser: "npm:5.33.0" tree-kill: "npm:1.2.2" ts-node: "npm:^10.9.1" tslib: "npm:2.7.0" @@ -782,7 +782,7 @@ __metadata: unenv: "npm:^1.10.0" verdaccio: "npm:5.32.2" verdaccio-auth-memory: "npm:^10.0.0" - vite: "npm:5.4.5" + vite: "npm:5.4.6" watchpack: "npm:2.4.2" webpack: "npm:5.94.0" webpack-dev-middleware: "npm:7.4.2" @@ -3289,9 +3289,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-darwin-arm64@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-darwin-arm64@npm:3.1.1" +"@lmdb/lmdb-darwin-arm64@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-darwin-arm64@npm:3.1.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -3303,9 +3303,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-darwin-x64@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-darwin-x64@npm:3.1.1" +"@lmdb/lmdb-darwin-x64@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-darwin-x64@npm:3.1.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -3317,9 +3317,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-arm64@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-linux-arm64@npm:3.1.1" +"@lmdb/lmdb-linux-arm64@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-linux-arm64@npm:3.1.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -3331,9 +3331,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-arm@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-linux-arm@npm:3.1.1" +"@lmdb/lmdb-linux-arm@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-linux-arm@npm:3.1.2" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -3345,9 +3345,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-linux-x64@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-linux-x64@npm:3.1.1" +"@lmdb/lmdb-linux-x64@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-linux-x64@npm:3.1.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -3359,9 +3359,9 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-win32-x64@npm:3.1.1": - version: 3.1.1 - resolution: "@lmdb/lmdb-win32-x64@npm:3.1.1" +"@lmdb/lmdb-win32-x64@npm:3.1.2": + version: 3.1.2 + resolution: "@lmdb/lmdb-win32-x64@npm:3.1.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3461,6 +3461,175 @@ __metadata: languageName: node linkType: hard +"@napi-rs/nice-android-arm-eabi@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-android-arm-eabi@npm:1.0.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@napi-rs/nice-android-arm64@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-android-arm64@npm:1.0.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-darwin-arm64@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-darwin-arm64@npm:1.0.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-darwin-x64@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-darwin-x64@npm:1.0.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice-freebsd-x64@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-freebsd-x64@npm:1.0.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm-gnueabihf@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-arm-gnueabihf@npm:1.0.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm64-gnu@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-arm64-gnu@npm:1.0.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm64-musl@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-arm64-musl@npm:1.0.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@napi-rs/nice-linux-ppc64-gnu@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-ppc64-gnu@npm:1.0.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-riscv64-gnu@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-riscv64-gnu@npm:1.0.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-s390x-gnu@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-s390x-gnu@npm:1.0.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-x64-gnu@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-x64-gnu@npm:1.0.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-x64-musl@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-linux-x64-musl@npm:1.0.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@napi-rs/nice-win32-arm64-msvc@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-win32-arm64-msvc@npm:1.0.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-ia32-msvc@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-win32-ia32-msvc@npm:1.0.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-x64-msvc@npm:1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice-win32-x64-msvc@npm:1.0.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice@npm:^1.0.1": + version: 1.0.1 + resolution: "@napi-rs/nice@npm:1.0.1" + dependencies: + "@napi-rs/nice-android-arm-eabi": "npm:1.0.1" + "@napi-rs/nice-android-arm64": "npm:1.0.1" + "@napi-rs/nice-darwin-arm64": "npm:1.0.1" + "@napi-rs/nice-darwin-x64": "npm:1.0.1" + "@napi-rs/nice-freebsd-x64": "npm:1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf": "npm:1.0.1" + "@napi-rs/nice-linux-arm64-gnu": "npm:1.0.1" + "@napi-rs/nice-linux-arm64-musl": "npm:1.0.1" + "@napi-rs/nice-linux-ppc64-gnu": "npm:1.0.1" + "@napi-rs/nice-linux-riscv64-gnu": "npm:1.0.1" + "@napi-rs/nice-linux-s390x-gnu": "npm:1.0.1" + "@napi-rs/nice-linux-x64-gnu": "npm:1.0.1" + "@napi-rs/nice-linux-x64-musl": "npm:1.0.1" + "@napi-rs/nice-win32-arm64-msvc": "npm:1.0.1" + "@napi-rs/nice-win32-ia32-msvc": "npm:1.0.1" + "@napi-rs/nice-win32-x64-msvc": "npm:1.0.1" + dependenciesMeta: + "@napi-rs/nice-android-arm-eabi": + optional: true + "@napi-rs/nice-android-arm64": + optional: true + "@napi-rs/nice-darwin-arm64": + optional: true + "@napi-rs/nice-darwin-x64": + optional: true + "@napi-rs/nice-freebsd-x64": + optional: true + "@napi-rs/nice-linux-arm-gnueabihf": + optional: true + "@napi-rs/nice-linux-arm64-gnu": + optional: true + "@napi-rs/nice-linux-arm64-musl": + optional: true + "@napi-rs/nice-linux-ppc64-gnu": + optional: true + "@napi-rs/nice-linux-riscv64-gnu": + optional: true + "@napi-rs/nice-linux-s390x-gnu": + optional: true + "@napi-rs/nice-linux-x64-gnu": + optional: true + "@napi-rs/nice-linux-x64-musl": + optional: true + "@napi-rs/nice-win32-arm64-msvc": + optional: true + "@napi-rs/nice-win32-ia32-msvc": + optional: true + "@napi-rs/nice-win32-x64-msvc": + optional: true + checksum: 10c0/9be30f8292e23f45f5b8f6553411f5cbaead998cc3a51859c60f56fc2e679610a3a04ed49b748267552b9abd17fe5e6ae88186e223ab5cb93d5d184d10b6569b + languageName: node + linkType: hard + "@ngtools/webpack@npm:0.0.0-PLACEHOLDER, @ngtools/webpack@workspace:packages/ngtools/webpack": version: 0.0.0-use.local resolution: "@ngtools/webpack@workspace:packages/ngtools/webpack" @@ -5186,15 +5355,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.5.0": - version: 8.5.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.5.0" +"@typescript-eslint/eslint-plugin@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.6.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.5.0" - "@typescript-eslint/type-utils": "npm:8.5.0" - "@typescript-eslint/utils": "npm:8.5.0" - "@typescript-eslint/visitor-keys": "npm:8.5.0" + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/type-utils": "npm:8.6.0" + "@typescript-eslint/utils": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -5205,25 +5374,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/69ae7067e03d2d8d442e69d668235bdafd63b07229d0be27025eaad8aa468b5af8ac54627021e0e3a060df04ed1c39d1327a0b11469ac72405b52b74a79f402b + checksum: 10c0/c777f01535b896d3092f9886a67ccf9e50bf9e0f581ffab607c5e95dbf3092299b0d9f3e6041b134d69059a6fa5691785940b81015f73bb9a0e9d1605f6442ea languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.5.0": - version: 8.5.0 - resolution: "@typescript-eslint/parser@npm:8.5.0" +"@typescript-eslint/parser@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/parser@npm:8.6.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.5.0" - "@typescript-eslint/types": "npm:8.5.0" - "@typescript-eslint/typescript-estree": "npm:8.5.0" - "@typescript-eslint/visitor-keys": "npm:8.5.0" + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/typescript-estree": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/509fdd605b86c7d025928f20e1035712c2fc268c34b1af84248ed0b53d699034f19caf98e085c5c758d3025e29939dd12eea427c72cae9e5ea79274364851f0a + checksum: 10c0/3f280d289b486359194d422d89df9896b3f10a6d45cdf851d1d5f3200489271a31ab503c127cb5656f9b0ad6d795dd708b960f21fb105750aac19f41f8f815d1 languageName: node linkType: hard @@ -5237,18 +5406,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.5.0": - version: 8.5.0 - resolution: "@typescript-eslint/type-utils@npm:8.5.0" +"@typescript-eslint/scope-manager@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/scope-manager@npm:8.6.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.5.0" - "@typescript-eslint/utils": "npm:8.5.0" + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + checksum: 10c0/37092ef70171c06854ac67ebfb2255063890c1c6133654e6b15b6adb6d2ab83de4feafd1599f4d02ed71a018226fcb3a389021758ec045e1904fb1798e90b4fe + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/type-utils@npm:8.6.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.6.0" + "@typescript-eslint/utils": "npm:8.6.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/675d3e41f938d16e9268fd33764a4e16b12a4a9817e61d5e2508a07fe6783c69ce9d05facc61822b5647c71d767929618ed37b8b93f423f7c2ccb62cfeb4343b + checksum: 10c0/914b4637caa40c102117655a9b4451e0db611a61309ed39d6c57522655463c059f4dfd4e2d7ffdefcc9ab7533be21fb877b740c58f5be11f3530aa29f3d2cb62 languageName: node linkType: hard @@ -5259,6 +5438,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/types@npm:8.6.0" + checksum: 10c0/e7051d212252f7d1905b5527b211e335db4ec5bb1d3a52d73c8d2de6ddf5cbc981f2c92ca9ffcef35f7447bda635ea1ccce5f884ade7f243d14f2a254982c698 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.5.0": version: 8.5.0 resolution: "@typescript-eslint/typescript-estree@npm:8.5.0" @@ -5278,7 +5464,40 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.5.0, @typescript-eslint/utils@npm:^8.4.0": +"@typescript-eslint/typescript-estree@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.6.0" + dependencies: + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/33ab8c03221a797865301f09d1d198c67f8b0e3dbf0d13e41f699dc2740242303a9fcfd7b38302cef318541fdedd832fd6e8ba34a5041a57e9114fa134045385 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/utils@npm:8.6.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/typescript-estree": "npm:8.6.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + checksum: 10c0/5b615106342dfdf09f5a73e2554cc0c4d979c262a9a4548eb76ec7045768e0ff0bf0316cf8a5eb5404689cd476fcd335fc84f90eb985557559e42aeee33d687e + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^8.4.0": version: 8.5.0 resolution: "@typescript-eslint/utils@npm:8.5.0" dependencies: @@ -5302,6 +5521,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.6.0" + dependencies: + "@typescript-eslint/types": "npm:8.6.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/9bd5d5daee9de7e009fdd1b64b1eca685a699d1b2639373bc279c97e25e769fff56fffef708ef66a2b19bc8bb201d36daf9e7084f0e0872178bfcf9d923b41f3 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -6575,16 +6804,16 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:9.1.3": - version: 9.1.3 - resolution: "babel-loader@npm:9.1.3" +"babel-loader@npm:9.2.1": + version: 9.2.1 + resolution: "babel-loader@npm:9.2.1" dependencies: find-cache-dir: "npm:^4.0.0" schema-utils: "npm:^4.0.0" peerDependencies: "@babel/core": ^7.12.0 webpack: ">=5" - checksum: 10c0/e3fc3c9e02bd908b37e8e8cd4f3d7280cf6ac45e33fc203aedbb615135a0fecc33bf92573b71a166a827af029d302c0b060354985cd91d510320bd70a2f949eb + checksum: 10c0/efb82faff4c7c27e9c15bb28bf11c73200e61cf365118a9514e8d74dd489d0afc2a0d5aaa62cb4254eefc2ab631579224d95a03fd245410f28ea75e24de54ba4 languageName: node linkType: hard @@ -7178,7 +7407,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:4.0.0": +"chokidar@npm:4.0.0, chokidar@npm:^4.0.0": version: 4.0.0 resolution: "chokidar@npm:4.0.0" dependencies: @@ -12172,16 +12401,16 @@ __metadata: languageName: node linkType: hard -"lmdb@npm:3.1.1": - version: 3.1.1 - resolution: "lmdb@npm:3.1.1" - dependencies: - "@lmdb/lmdb-darwin-arm64": "npm:3.1.1" - "@lmdb/lmdb-darwin-x64": "npm:3.1.1" - "@lmdb/lmdb-linux-arm": "npm:3.1.1" - "@lmdb/lmdb-linux-arm64": "npm:3.1.1" - "@lmdb/lmdb-linux-x64": "npm:3.1.1" - "@lmdb/lmdb-win32-x64": "npm:3.1.1" +"lmdb@npm:3.1.2": + version: 3.1.2 + resolution: "lmdb@npm:3.1.2" + dependencies: + "@lmdb/lmdb-darwin-arm64": "npm:3.1.2" + "@lmdb/lmdb-darwin-x64": "npm:3.1.2" + "@lmdb/lmdb-linux-arm": "npm:3.1.2" + "@lmdb/lmdb-linux-arm64": "npm:3.1.2" + "@lmdb/lmdb-linux-x64": "npm:3.1.2" + "@lmdb/lmdb-win32-x64": "npm:3.1.2" msgpackr: "npm:^1.10.2" node-addon-api: "npm:^6.1.0" node-gyp: "npm:latest" @@ -12203,7 +12432,7 @@ __metadata: optional: true bin: download-lmdb-prebuilds: bin/download-prebuilds.js - checksum: 10c0/35c1f14b0f7bac0a6dcb1b943d95500c749ff0e89464aef37d1a27afe882a12ec3feacfb141722bce6a69f335c57d2dd56c5b2204b882d4b94dfac89dbb89655 + checksum: 10c0/44e0344577a0730d67b14bca5deab33c2a0cbb998e4e6888131ee0315f1d2c474c609644595d8fd8552ce81acc12783055a1e44cb12a7382839835f8d4b8ce04 languageName: node linkType: hard @@ -14178,6 +14407,18 @@ __metadata: languageName: node linkType: hard +"piscina@npm:4.7.0": + version: 4.7.0 + resolution: "piscina@npm:4.7.0" + dependencies: + "@napi-rs/nice": "npm:^1.0.1" + dependenciesMeta: + "@napi-rs/nice": + optional: true + checksum: 10c0/d539857c9140d820173c78c9d6b7c20597ae4ff10a5060ff90ffc1d22a098eccd98f4d16073ce51c6d07e530079fa4d9a31ff7b4477b1411011e108b5b5689d4 + languageName: node + linkType: hard + "pkg-dir@npm:^4.1.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -15359,6 +15600,19 @@ __metadata: languageName: node linkType: hard +"sass@npm:1.79.1": + version: 1.79.1 + resolution: "sass@npm:1.79.1" + dependencies: + chokidar: "npm:^4.0.0" + immutable: "npm:^4.0.0" + source-map-js: "npm:>=0.6.2 <2.0.0" + bin: + sass: sass.js + checksum: 10c0/187bc885bad2e81e5414a146c9e14a28f622b5aba5c1425f4dd6d8ef2045b66c69de93689503886a8d2cc55d6bcce97b05ee87b074628fefd03e762789f931d0 + languageName: node + linkType: hard + "saucelabs@npm:^1.5.0": version: 1.5.0 resolution: "saucelabs@npm:1.5.0" @@ -16464,7 +16718,21 @@ __metadata: languageName: node linkType: hard -"terser@npm:5.32.0, terser@npm:^5.26.0": +"terser@npm:5.33.0": + version: 5.33.0 + resolution: "terser@npm:5.33.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/18a1cd33366dcd8fee7d6eef78c9c417cbe688e5153841e6a574f9d4937066dc40f67b1e96305f73f25bc6f2c458dbe442a056092c99619d4dbee8ad9fae4a3e + languageName: node + linkType: hard + +"terser@npm:^5.26.0": version: 5.32.0 resolution: "terser@npm:5.32.0" dependencies: @@ -17462,9 +17730,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:5.4.5": - version: 5.4.5 - resolution: "vite@npm:5.4.5" +"vite@npm:5.4.6": + version: 5.4.6 + resolution: "vite@npm:5.4.6" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -17501,7 +17769,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/89c6459452fc238cdf8e99681b30996af171c9c557af476f96408a18a639fb5a0a6ee2d2257e005b21dc284edceb604595c34920cd4a007ad18f7ebafb654c76 + checksum: 10c0/5f87be3a10e970eaf9ac52dfab39cf9fff583036685252fb64570b6d7bfa749f6d221fb78058f5ef4b5664c180d45a8e7a7ff68d7f3770e69e24c7c68b958bde languageName: node linkType: hard From 8c9bf694da4616c3b91eda7a5526445d890f5581 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 18 Sep 2024 18:10:26 +0000 Subject: [PATCH 51/53] build: update angular --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 42 ++-- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/pr.yml | 34 +-- package.json | 28 +-- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- tests/legacy-cli/e2e/ng-snapshot/package.json | 32 +-- yarn.lock | 208 +++++++++--------- 10 files changed, 184 insertions(+), 184 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index c279978350c3..302be0c8628b 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@a95d79881ee8d7da8d65579948b296edfe6722c1 + - uses: angular/dev-infra/github-actions/branch-manager@12e38ba595aa3bbe4230e9568517c7309fca93bc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 717a33d66cc5..fcc37a0eb788 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Generate JSON schema types @@ -42,11 +42,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -56,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -90,13 +90,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} @@ -149,13 +149,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -182,11 +182,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - run: yarn admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index b41e3a4da806..45e6c117cfcb 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@a95d79881ee8d7da8d65579948b296edfe6722c1 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@12e38ba595aa3bbe4230e9568517c7309fca93bc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: angular/dev-infra/github-actions/post-approval-changes@a95d79881ee8d7da8d65579948b296edfe6722c1 + - uses: angular/dev-infra/github-actions/post-approval-changes@12e38ba595aa3bbe4230e9568517c7309fca93bc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index d7b0d4f406a1..8d53949bce31 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@a95d79881ee8d7da8d65579948b296edfe6722c1 + - uses: angular/dev-infra/github-actions/feature-request@12e38ba595aa3bbe4230e9568517c7309fca93bc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c1ea47521a1d..3d446f26c309 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup ESLint Caching uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: @@ -54,7 +54,7 @@ jobs: - name: Run Validation run: yarn admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/linting/licenses@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Check tooling setup run: yarn check-tooling-setup - name: Check commit message @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Build release targets @@ -90,11 +90,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Run module and package tests @@ -111,13 +111,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -132,13 +132,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -155,12 +155,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Install node modules run: yarn install --immutable - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/setup@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a95d79881ee8d7da8d65579948b296edfe6722c1 + uses: angular/dev-infra/github-actions/bazel/configure-remote@12e38ba595aa3bbe4230e9568517c7309fca93bc - name: Run CLI E2E tests run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/package.json b/package.json index a111e3b564c2..d4888c8911c1 100644 --- a/package.json +++ b/package.json @@ -52,23 +52,23 @@ }, "devDependencies": { "@ampproject/remapping": "2.3.0", - "@angular/animations": "19.0.0-next.5", + "@angular/animations": "19.0.0-next.6", "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#9b310e6da3c87a36fd668e584bcd857bae8eb144", "@angular/cdk": "19.0.0-next.4", - "@angular/common": "19.0.0-next.5", - "@angular/compiler": "19.0.0-next.5", - "@angular/compiler-cli": "19.0.0-next.5", - "@angular/core": "19.0.0-next.5", - "@angular/forms": "19.0.0-next.5", - "@angular/localize": "19.0.0-next.5", + "@angular/common": "19.0.0-next.6", + "@angular/compiler": "19.0.0-next.6", + "@angular/compiler-cli": "19.0.0-next.6", + "@angular/core": "19.0.0-next.6", + "@angular/forms": "19.0.0-next.6", + "@angular/localize": "19.0.0-next.6", "@angular/material": "19.0.0-next.4", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887", - "@angular/platform-browser": "19.0.0-next.5", - "@angular/platform-browser-dynamic": "19.0.0-next.5", - "@angular/platform-server": "19.0.0-next.5", - "@angular/router": "19.0.0-next.5", - "@angular/service-worker": "19.0.0-next.5", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#68d080d76124a3255475ef08200eeeec468154e0", + "@angular/platform-browser": "19.0.0-next.6", + "@angular/platform-browser-dynamic": "19.0.0-next.6", + "@angular/platform-server": "19.0.0-next.6", + "@angular/router": "19.0.0-next.6", + "@angular/service-worker": "19.0.0-next.6", "@babel/core": "7.25.2", "@babel/generator": "7.25.6", "@babel/helper-annotate-as-pure": "7.24.7", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 26aed047e51c..cca74bdf9c04 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -22,12 +22,12 @@ "@angular/router": "^19.0.0-next.0" }, "devDependencies": { - "@angular/common": "19.0.0-next.5", - "@angular/compiler": "19.0.0-next.5", - "@angular/core": "19.0.0-next.5", - "@angular/platform-browser": "19.0.0-next.5", - "@angular/platform-server": "19.0.0-next.5", - "@angular/router": "19.0.0-next.5", + "@angular/common": "19.0.0-next.6", + "@angular/compiler": "19.0.0-next.6", + "@angular/core": "19.0.0-next.6", + "@angular/platform-browser": "19.0.0-next.6", + "@angular/platform-server": "19.0.0-next.6", + "@angular/router": "19.0.0-next.6", "@bazel/runfiles": "^5.8.1" }, "schematics": "./schematics/collection.json", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index abf4c8006318..e62e214fbd4f 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular/compiler": "19.0.0-next.5", - "@angular/compiler-cli": "19.0.0-next.5", + "@angular/compiler": "19.0.0-next.6", + "@angular/compiler-cli": "19.0.0-next.6", "typescript": "5.6.2", "webpack": "5.94.0" } diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index 8f8fc5d4601d..12cdd4d88d53 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#28df2d170cf1dd7203ee92ef8214fd387c686de7", - "@angular/cdk": "github:angular/cdk-builds#3f688e74195a36b73626c3dedc31c87b0deb037e", - "@angular/common": "github:angular/common-builds#fcc314d38a2a432fa3a04e2e763d0ac47bfec42a", - "@angular/compiler": "github:angular/compiler-builds#969ce284e9546b7387066d1083b69416c6167875", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#be949b9df4de1f1bef704613217238674a7a8946", - "@angular/core": "github:angular/core-builds#e1c6544868898a6e7859acfb56ea14af8b70b60d", - "@angular/forms": "github:angular/forms-builds#ce874a51bec3c59c6f362cbbd3bf6fb8c137a0d0", - "@angular/language-service": "github:angular/language-service-builds#7b5b5dab5c58d1edc0c45d46cb954c672336a3b5", - "@angular/localize": "github:angular/localize-builds#1bf47cfe97ebebaffb68c52ec5ec8b75b5e4badf", - "@angular/material": "github:angular/material-builds#c074dbf9a39eef2fb1f356276b3d1fc772fcc6e0", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#1e1d54309f309179621d8e25c9ac452350ee586e", - "@angular/platform-browser": "github:angular/platform-browser-builds#eafe65a09330ccff9820ff1a269aeb935cd89ae7", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#dbbfa3a4683b3c835a999127a3b4c2fd1cb3939d", - "@angular/platform-server": "github:angular/platform-server-builds#13b48843a9ef0534edcb344c4029b7f41df86de1", - "@angular/router": "github:angular/router-builds#280576af9ca1513b2c6636ecce3ec50b33ee5fc8", - "@angular/service-worker": "github:angular/service-worker-builds#4c0ed6a83ea9ebd15b93699451668f4ea6302aa6" + "@angular/animations": "github:angular/animations-builds#a62061613c754f8958e6f7027b3e78ffbb91fd97", + "@angular/cdk": "github:angular/cdk-builds#60b29771c354665a1fcdfd00fb46edf4214eb0b1", + "@angular/common": "github:angular/common-builds#c79b408a92ae53c1283b7efae1fa98282af9b1f1", + "@angular/compiler": "github:angular/compiler-builds#f708affac0ab23c4032093a33e92da33ea61df13", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#1af995f668a530dcfc81db96c8ec07e7c9c6ce3e", + "@angular/core": "github:angular/core-builds#89f6dfa3f4cde1f54b09f8525ceed79d76a9b12f", + "@angular/forms": "github:angular/forms-builds#433bfa754e44936a75b088d4bb12844d11786384", + "@angular/language-service": "github:angular/language-service-builds#1f6837c7794e14565968f36884e38d317940e6b1", + "@angular/localize": "github:angular/localize-builds#539501f8f76e18fb762d1a8e5b6e136f448c7fe1", + "@angular/material": "github:angular/material-builds#4743fd1642ff4cc6e16117cc1ace43d38cf6d51c", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#57d312169987959306153bc126b88fe621e56b1f", + "@angular/platform-browser": "github:angular/platform-browser-builds#cc3141e0f2c3885e5248e64da3a99844879e0f94", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#94c30c385050a465c45d9d2934ca6c06fb167c81", + "@angular/platform-server": "github:angular/platform-server-builds#ba3c81a96256674341b224da856b75fe887bd9dd", + "@angular/router": "github:angular/router-builds#50ff19ab1b82276344dba71527a74ae7033684ed", + "@angular/service-worker": "github:angular/service-worker-builds#79529de6fd91fd513abbf98f901518f2edc4ec0d" } } diff --git a/yarn.lock b/yarn.lock index a91c13d4c4d6..0d26d302af6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -252,14 +252,14 @@ __metadata: languageName: unknown linkType: soft -"@angular/animations@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/animations@npm:19.0.0-next.5" +"@angular/animations@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/animations@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.5 - checksum: 10c0/79cbfeac4d87f4c079d65243e0b9bc8135fc5d29ac1cdee92ef5ac86dde054d32a63a21d9d764b2c299173f6926ad1bf189542c643db37ef201c67e1506c5efb + "@angular/core": 19.0.0-next.6 + checksum: 10c0/b679db6f2da75f591ef03f8a370a99448c0900734e1adaffc45608581ed95bdf2fb075a6562f877c0afdcdda7a4d8ac3a443116f1cd0cdeb0cc3779a91a02dd7 languageName: node linkType: hard @@ -331,9 +331,9 @@ __metadata: languageName: node linkType: hard -"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75": - version: 0.0.0-a95d79881ee8d7da8d65579948b296edfe6722c1 - resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=3ca0e724cf24354bc2344b51cc0028a0ebeeed75" +"@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#9b310e6da3c87a36fd668e584bcd857bae8eb144": + version: 0.0.0-12e38ba595aa3bbe4230e9568517c7309fca93bc + resolution: "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#commit=9b310e6da3c87a36fd668e584bcd857bae8eb144" dependencies: "@angular/benchpress": "npm:0.3.0" "@angular/build": "npm:19.0.0-next.6" @@ -373,7 +373,7 @@ __metadata: dependenciesMeta: re2: built: false - checksum: 10c0/66a21a1951a6cde33590d3231d68f2b646a5f72ae424631dcd8d7d8700436e2625fbe67ed633e0983c37fa5c6a7e36cd318d215be4fa2ca2bc93af20bca4d0c7 + checksum: 10c0/7494477c5ba516436c711b7c8c072cac693f2bd109b50c99b138c35aa5cd37c36b47c4e219989003289ff6c8cadf8c30c310eda5143bcd0d0d3f9668ef90388f languageName: node linkType: hard @@ -542,21 +542,21 @@ __metadata: languageName: unknown linkType: soft -"@angular/common@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/common@npm:19.0.0-next.5" +"@angular/common@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/common@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.5 + "@angular/core": 19.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/014054366005552256fe6f61ade5771225a9643d580853d4d6f537dd608d3bec60871006091ebb59be1a4ad023534011408abcfa49f83a5f7341aea188b6eba2 + checksum: 10c0/56aca1bc75c43915e0e0753c750f835561b9d94a5aca1fc065e713ca6fd861df3dc359461370e313075416eeec572956f38675f8b0240ecbb4c069177d7b9d05 languageName: node linkType: hard -"@angular/compiler-cli@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/compiler-cli@npm:19.0.0-next.5" +"@angular/compiler-cli@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/compiler-cli@npm:19.0.0-next.6" dependencies: "@babel/core": "npm:7.25.2" "@jridgewell/sourcemap-codec": "npm:^1.4.14" @@ -567,39 +567,39 @@ __metadata: tslib: "npm:^2.3.0" yargs: "npm:^17.2.1" peerDependencies: - "@angular/compiler": 19.0.0-next.5 + "@angular/compiler": 19.0.0-next.6 typescript: ">=5.5 <5.7" bin: ng-xi18n: bundles/src/bin/ng_xi18n.js ngc: bundles/src/bin/ngc.js ngcc: bundles/ngcc/index.js - checksum: 10c0/4652476d08940f05ddedac8c1939c8823caf0a0da26f8abdf9e4184a874665e8cb9c3eca2a3aa9f5e8df183188aa4fc2af88595fe0237014d0da8af90e37492c + checksum: 10c0/d79b474415ef5e3770280066b592e9c6dcb6ab1389f0c3b26d856a39d690a586cc5b055245289cb44b100b71c4caed6b0c330e67d14a614b286f32895f32a313 languageName: node linkType: hard -"@angular/compiler@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/compiler@npm:19.0.0-next.5" +"@angular/compiler@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/compiler@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/core": 19.0.0-next.5 + "@angular/core": 19.0.0-next.6 peerDependenciesMeta: "@angular/core": optional: true - checksum: 10c0/14293a80b348206afd386c4e549900128a4df626218c7bd95b6b8b8b93b46139cd9c40219ae89e145482bcdbfa991948259df399f6fe37f33505c98b7a043f24 + checksum: 10c0/5762c38e3258d5ff97e1ac265e7da4fa3e2ec847ce0c6c5707906386e0f852a0a670729d08b8e03298a8357ad294b785086d27335cffcd5cc2dcd627bf855355 languageName: node linkType: hard -"@angular/core@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/core@npm:19.0.0-next.5" +"@angular/core@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/core@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 - checksum: 10c0/913e79663353f74a83eda26fecaaebb89c82d0299ca46060747bdf1bbefd0713c92b6982bac512d399dddc5a79ffb31680391e396e8a674b876168a31f078c40 + checksum: 10c0/c5692c93dbb4b7a41435bcca390b872899a84e9886eac861806f0a97a572c485bfd100184a02b9bce1d09a140506bae23b8d06f1ed4990469cbd1db15f420619 languageName: node linkType: hard @@ -630,23 +630,23 @@ __metadata: resolution: "@angular/devkit-repo@workspace:." dependencies: "@ampproject/remapping": "npm:2.3.0" - "@angular/animations": "npm:19.0.0-next.5" + "@angular/animations": "npm:19.0.0-next.6" "@angular/bazel": "patch:@angular/bazel@https%3A//github.com/angular/bazel-builds.git%23commit=9e6140d1eef8ddf7113d00738f603e9cc3c310f1#~/.yarn/patches/@angular-bazel-https-9848736cf4.patch" - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#3ca0e724cf24354bc2344b51cc0028a0ebeeed75" + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#9b310e6da3c87a36fd668e584bcd857bae8eb144" "@angular/cdk": "npm:19.0.0-next.4" - "@angular/common": "npm:19.0.0-next.5" - "@angular/compiler": "npm:19.0.0-next.5" - "@angular/compiler-cli": "npm:19.0.0-next.5" - "@angular/core": "npm:19.0.0-next.5" - "@angular/forms": "npm:19.0.0-next.5" - "@angular/localize": "npm:19.0.0-next.5" + "@angular/common": "npm:19.0.0-next.6" + "@angular/compiler": "npm:19.0.0-next.6" + "@angular/compiler-cli": "npm:19.0.0-next.6" + "@angular/core": "npm:19.0.0-next.6" + "@angular/forms": "npm:19.0.0-next.6" + "@angular/localize": "npm:19.0.0-next.6" "@angular/material": "npm:19.0.0-next.4" - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887" - "@angular/platform-browser": "npm:19.0.0-next.5" - "@angular/platform-browser-dynamic": "npm:19.0.0-next.5" - "@angular/platform-server": "npm:19.0.0-next.5" - "@angular/router": "npm:19.0.0-next.5" - "@angular/service-worker": "npm:19.0.0-next.5" + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#68d080d76124a3255475ef08200eeeec468154e0" + "@angular/platform-browser": "npm:19.0.0-next.6" + "@angular/platform-browser-dynamic": "npm:19.0.0-next.6" + "@angular/platform-server": "npm:19.0.0-next.6" + "@angular/router": "npm:19.0.0-next.6" + "@angular/service-worker": "npm:19.0.0-next.6" "@babel/core": "npm:7.25.2" "@babel/generator": "npm:7.25.6" "@babel/helper-annotate-as-pure": "npm:7.24.7" @@ -800,36 +800,36 @@ __metadata: languageName: unknown linkType: soft -"@angular/forms@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/forms@npm:19.0.0-next.5" +"@angular/forms@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/forms@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 - "@angular/platform-browser": 19.0.0-next.5 + "@angular/common": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 + "@angular/platform-browser": 19.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/2805c0daa2068935833458ef84eaddff32006dc9307d29ba86a3c7c540d7bfee4eb72ce5b18caae92154628f509c1d4dcf6630e8df35d665075f4c68f8e9dc43 + checksum: 10c0/b8b781c8670e73262fa1b75dd0f75fe6ba72a51f935332c833c106d0019f637cf48ace2d21193e2cea3018828de3b071b56fa12a294b6cd38b90508a608ce3d4 languageName: node linkType: hard -"@angular/localize@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/localize@npm:19.0.0-next.5" +"@angular/localize@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/localize@npm:19.0.0-next.6" dependencies: "@babel/core": "npm:7.25.2" "@types/babel__core": "npm:7.20.5" fast-glob: "npm:3.3.2" yargs: "npm:^17.2.1" peerDependencies: - "@angular/compiler": 19.0.0-next.5 - "@angular/compiler-cli": 19.0.0-next.5 + "@angular/compiler": 19.0.0-next.6 + "@angular/compiler-cli": 19.0.0-next.6 bin: localize-extract: tools/bundles/src/extract/cli.js localize-migrate: tools/bundles/src/migrate/cli.js localize-translate: tools/bundles/src/translate/cli.js - checksum: 10c0/1374495b97cca160af4a4776011bc841a32122900a4cf783a9f7082ea872ef2bab0676f9636e501f049787d9422996f949f30ce4fd8b136a494b2c06cd6e07ed + checksum: 10c0/767ef1e3863092b471492cf97dbb0fd9e533ba7720f0ff7c5b6b91770b091f217bd0563b170b4d245f4e861b58a5f88b7e38951ec1ea9aaea5f7264dbba7a900 languageName: node linkType: hard @@ -850,9 +850,9 @@ __metadata: languageName: node linkType: hard -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#8b01aab7d66a133165744f0ef947d56015831887": - version: 0.0.0-a95d79881ee8d7da8d65579948b296edfe6722c1 - resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=8b01aab7d66a133165744f0ef947d56015831887" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#68d080d76124a3255475ef08200eeeec468154e0": + version: 0.0.0-12e38ba595aa3bbe4230e9568517c7309fca93bc + resolution: "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#commit=68d080d76124a3255475ef08200eeeec468154e0" dependencies: "@octokit/rest": "npm:21.0.2" "@types/semver": "npm:^7.3.6" @@ -866,53 +866,53 @@ __metadata: yaml: "npm:2.5.1" bin: ng-dev: ./bundles/cli.mjs - checksum: 10c0/d43435b1147323c2949f268abf4defbea0f00e1cfba5d43229de1dd86bf90f2ace9a57e988355206300c2106583d13f3ce88fd4d63347c13367b622bcbcadbf1 + checksum: 10c0/26451b062522ea69e4642a061d034b6d6e4d90dbf91583c33388208aa0d786b54b22ee09809f7e6879a6256c7c32a074e4f0e3512f4e590949ce851ba8729c25 languageName: node linkType: hard -"@angular/platform-browser-dynamic@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/platform-browser-dynamic@npm:19.0.0-next.5" +"@angular/platform-browser-dynamic@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/platform-browser-dynamic@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.5 - "@angular/compiler": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 - "@angular/platform-browser": 19.0.0-next.5 - checksum: 10c0/8de4720b948bfed7b01f5936a9d0c99d473f6f5d174f7419906048a3fd3a2fee5c0619b1912c8b17223121d658d905cbc2dbfbc1b608bfb2235905598c6c1a92 + "@angular/common": 19.0.0-next.6 + "@angular/compiler": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 + "@angular/platform-browser": 19.0.0-next.6 + checksum: 10c0/1c27e7ba0821c0002d1d66bfff1419f2296b7695667c1eccb61cd17689d56b2561eb3627dea24cd72539bb3018967fafe6fc9594669b5c440b5640dccef32aef languageName: node linkType: hard -"@angular/platform-browser@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/platform-browser@npm:19.0.0-next.5" +"@angular/platform-browser@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/platform-browser@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/animations": 19.0.0-next.5 - "@angular/common": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 + "@angular/animations": 19.0.0-next.6 + "@angular/common": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 peerDependenciesMeta: "@angular/animations": optional: true - checksum: 10c0/0511a1ba7899b146aaffb80a5231f37cf4d3ba4d8517e9a7cad89fdba5c00d4e8d1d5931c5a0f6cd821bf9c8b8f8f8d3fec972799f0195fcfef5bd1d6af71ca8 + checksum: 10c0/436aaa45030044e36c55c44528718afc3e203e58c1fa7b7e33de5bafde734647d5057f126f7e62ea54e8c6298d0fab902be2e83a6ed15343cb01fc1b8104d33c languageName: node linkType: hard -"@angular/platform-server@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/platform-server@npm:19.0.0-next.5" +"@angular/platform-server@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/platform-server@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" xhr2: "npm:^0.2.0" peerDependencies: - "@angular/animations": 19.0.0-next.5 - "@angular/common": 19.0.0-next.5 - "@angular/compiler": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 - "@angular/platform-browser": 19.0.0-next.5 - checksum: 10c0/a041c5b8c622528caf933e64dc81008569c155f2d91d435e0517697d5d231b1f35146d3c0762ceffd82251e9c69559a4914c6c6641beb40b454e49abc5f39907 + "@angular/animations": 19.0.0-next.6 + "@angular/common": 19.0.0-next.6 + "@angular/compiler": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 + "@angular/platform-browser": 19.0.0-next.6 + checksum: 10c0/b4f5eaeb099ad13d431b48123a95742d5dda2f971b53593189078a5ea6fd2fe0b32b31b16d5c38fcc69409524ef8b7bfb5e8d516c70892e8abdc8747787080b3 languageName: node linkType: hard @@ -931,31 +931,31 @@ __metadata: languageName: unknown linkType: soft -"@angular/router@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/router@npm:19.0.0-next.5" +"@angular/router@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/router@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 - "@angular/platform-browser": 19.0.0-next.5 + "@angular/common": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 + "@angular/platform-browser": 19.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - checksum: 10c0/ef90209c57e0f5cd56911f920597fb4e7645ca415fb1709b312e7deee242ac86fda15ae5ab53353bc05f46a56dd813a66274aae3e90d1c60f3502b20332835e3 + checksum: 10c0/0e1332a64ac2f445a7789deac18d3e304691f46c0d63cea443360655d701eb064b26cb16e90d0510b9674b3a5e9379e462ed83886092d79dc6d07fdf2eb37be9 languageName: node linkType: hard -"@angular/service-worker@npm:19.0.0-next.5": - version: 19.0.0-next.5 - resolution: "@angular/service-worker@npm:19.0.0-next.5" +"@angular/service-worker@npm:19.0.0-next.6": + version: 19.0.0-next.6 + resolution: "@angular/service-worker@npm:19.0.0-next.6" dependencies: tslib: "npm:^2.3.0" peerDependencies: - "@angular/common": 19.0.0-next.5 - "@angular/core": 19.0.0-next.5 + "@angular/common": 19.0.0-next.6 + "@angular/core": 19.0.0-next.6 bin: ngsw-config: ngsw-config.js - checksum: 10c0/10bd0f979259a678becbd726254ca280881bb031ed3e265ca3969effdf27f9a2f390fa7109b969a6f4487998fc93f36cc3a7981ca8a9e00524bd473b63f4905c + checksum: 10c0/ab1b46302c28e6fa5b3b72ca18be375fdf7a424ebc8fbd350384fdcae3189750796104855657156228785f7b8aff6d832f2d34bc2b8086cce620db6644201e5b languageName: node linkType: hard @@ -963,12 +963,12 @@ __metadata: version: 0.0.0-use.local resolution: "@angular/ssr@workspace:packages/angular/ssr" dependencies: - "@angular/common": "npm:19.0.0-next.5" - "@angular/compiler": "npm:19.0.0-next.5" - "@angular/core": "npm:19.0.0-next.5" - "@angular/platform-browser": "npm:19.0.0-next.5" - "@angular/platform-server": "npm:19.0.0-next.5" - "@angular/router": "npm:19.0.0-next.5" + "@angular/common": "npm:19.0.0-next.6" + "@angular/compiler": "npm:19.0.0-next.6" + "@angular/core": "npm:19.0.0-next.6" + "@angular/platform-browser": "npm:19.0.0-next.6" + "@angular/platform-server": "npm:19.0.0-next.6" + "@angular/router": "npm:19.0.0-next.6" "@bazel/runfiles": "npm:^5.8.1" tslib: "npm:^2.3.0" peerDependencies: @@ -3635,8 +3635,8 @@ __metadata: resolution: "@ngtools/webpack@workspace:packages/ngtools/webpack" dependencies: "@angular-devkit/core": "npm:0.0.0-PLACEHOLDER" - "@angular/compiler": "npm:19.0.0-next.5" - "@angular/compiler-cli": "npm:19.0.0-next.5" + "@angular/compiler": "npm:19.0.0-next.6" + "@angular/compiler-cli": "npm:19.0.0-next.6" typescript: "npm:5.6.2" webpack: "npm:5.94.0" peerDependencies: From 3d10fa19282ad58f900ed61e81b38c11d5647e6e Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Wed, 18 Sep 2024 15:58:05 -0700 Subject: [PATCH 52/53] docs: release notes for the v16.2.16 release --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9ea3de8e1ba..d8e8c6e20633 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ + + +# 16.2.16 (2024-09-18) + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------- | +| [12aca0060](https://github.com/angular/angular-cli/commit/12aca0060492c73cec1bbc231119dde6a4b52607) | fix | update vite to 4.5.5 | + + + # 19.0.0-next.6 (2024-09-13) From ed2aecf14357dca96a7399a4a57b8be6aa837567 Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Wed, 18 Sep 2024 16:32:19 -0700 Subject: [PATCH 53/53] docs: release notes for the v18.2.5 release --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8e8c6e20633..4a1ccf954028 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + + +# 18.2.5 (2024-09-18) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [707431625](https://github.com/angular/angular-cli/commit/7074316257bd736e0d3393368fc93dec9604b49e) | fix | support HTTP HEAD requests for virtual output files | +| [1032b3da1](https://github.com/angular/angular-cli/commit/1032b3da1a0f3aaf63d2fd3cd8c6fd3b0d0b578c) | fix | update vite to `5.4.6` | + + + # 16.2.16 (2024-09-18)