@angular/platform-server 22.0.0-rc.3 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -109,7 +109,7 @@ class PlatformState {
109
109
  }
110
110
  static ɵfac = i0.ɵɵngDeclareFactory({
111
111
  minVersion: "12.0.0",
112
- version: "22.0.0-rc.3",
112
+ version: "22.0.0",
113
113
  ngImport: i0,
114
114
  type: PlatformState,
115
115
  deps: [{
@@ -119,14 +119,14 @@ class PlatformState {
119
119
  });
120
120
  static ɵprov = i0.ɵɵngDeclareInjectable({
121
121
  minVersion: "12.0.0",
122
- version: "22.0.0-rc.3",
122
+ version: "22.0.0",
123
123
  ngImport: i0,
124
124
  type: PlatformState
125
125
  });
126
126
  }
127
127
  i0.ɵɵngDeclareClassMetadata({
128
128
  minVersion: "12.0.0",
129
- version: "22.0.0-rc.3",
129
+ version: "22.0.0",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -208,7 +208,7 @@ class ServerXhr {
208
208
  }
209
209
  static ɵfac = i0.ɵɵngDeclareFactory({
210
210
  minVersion: "12.0.0",
211
- version: "22.0.0-rc.3",
211
+ version: "22.0.0",
212
212
  ngImport: i0,
213
213
  type: ServerXhr,
214
214
  deps: [],
@@ -216,14 +216,14 @@ class ServerXhr {
216
216
  });
217
217
  static ɵprov = i0.ɵɵngDeclareInjectable({
218
218
  minVersion: "12.0.0",
219
- version: "22.0.0-rc.3",
219
+ version: "22.0.0",
220
220
  ngImport: i0,
221
221
  type: ServerXhr
222
222
  });
223
223
  }
224
224
  i0.ɵɵngDeclareClassMetadata({
225
225
  minVersion: "12.0.0",
226
- version: "22.0.0-rc.3",
226
+ version: "22.0.0",
227
227
  ngImport: i0,
228
228
  type: ServerXhr,
229
229
  decorators: [{
@@ -360,7 +360,7 @@ class ServerPlatformLocation {
360
360
  }
361
361
  static ɵfac = i0.ɵɵngDeclareFactory({
362
362
  minVersion: "12.0.0",
363
- version: "22.0.0-rc.3",
363
+ version: "22.0.0",
364
364
  ngImport: i0,
365
365
  type: ServerPlatformLocation,
366
366
  deps: [],
@@ -368,14 +368,14 @@ class ServerPlatformLocation {
368
368
  });
369
369
  static ɵprov = i0.ɵɵngDeclareInjectable({
370
370
  minVersion: "12.0.0",
371
- version: "22.0.0-rc.3",
371
+ version: "22.0.0",
372
372
  ngImport: i0,
373
373
  type: ServerPlatformLocation
374
374
  });
375
375
  }
376
376
  i0.ɵɵngDeclareClassMetadata({
377
377
  minVersion: "12.0.0",
378
- version: "22.0.0-rc.3",
378
+ version: "22.0.0",
379
379
  ngImport: i0,
380
380
  type: ServerPlatformLocation,
381
381
  decorators: [{
@@ -398,7 +398,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
398
398
  }
399
399
  static ɵfac = i0.ɵɵngDeclareFactory({
400
400
  minVersion: "12.0.0",
401
- version: "22.0.0-rc.3",
401
+ version: "22.0.0",
402
402
  ngImport: i0,
403
403
  type: ServerEventManagerPlugin,
404
404
  deps: [{
@@ -408,14 +408,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
408
408
  });
409
409
  static ɵprov = i0.ɵɵngDeclareInjectable({
410
410
  minVersion: "12.0.0",
411
- version: "22.0.0-rc.3",
411
+ version: "22.0.0",
412
412
  ngImport: i0,
413
413
  type: ServerEventManagerPlugin
414
414
  });
415
415
  }
416
416
  i0.ɵɵngDeclareClassMetadata({
417
417
  minVersion: "12.0.0",
418
- version: "22.0.0-rc.3",
418
+ version: "22.0.0",
419
419
  ngImport: i0,
420
420
  type: ServerEventManagerPlugin,
421
421
  decorators: [{
@@ -525,7 +525,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
525
525
  class ServerModule {
526
526
  static ɵfac = i0.ɵɵngDeclareFactory({
527
527
  minVersion: "12.0.0",
528
- version: "22.0.0-rc.3",
528
+ version: "22.0.0",
529
529
  ngImport: i0,
530
530
  type: ServerModule,
531
531
  deps: [],
@@ -533,14 +533,14 @@ class ServerModule {
533
533
  });
534
534
  static ɵmod = i0.ɵɵngDeclareNgModule({
535
535
  minVersion: "14.0.0",
536
- version: "22.0.0-rc.3",
536
+ version: "22.0.0",
537
537
  ngImport: i0,
538
538
  type: ServerModule,
539
539
  exports: [BrowserModule]
540
540
  });
541
541
  static ɵinj = i0.ɵɵngDeclareInjector({
542
542
  minVersion: "12.0.0",
543
- version: "22.0.0-rc.3",
543
+ version: "22.0.0",
544
544
  ngImport: i0,
545
545
  type: ServerModule,
546
546
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -549,7 +549,7 @@ class ServerModule {
549
549
  }
550
550
  i0.ɵɵngDeclareClassMetadata({
551
551
  minVersion: "12.0.0",
552
- version: "22.0.0-rc.3",
552
+ version: "22.0.0",
553
553
  ngImport: i0,
554
554
  type: ServerModule,
555
555
  decorators: [{
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -226,7 +226,7 @@ function isHostAllowed(hostname, allowedHosts) {
226
226
  return false;
227
227
  }
228
228
 
229
- const VERSION = /* @__PURE__ */new Version('22.0.0-rc.3');
229
+ const VERSION = /* @__PURE__ */new Version('22.0.0');
230
230
 
231
231
  export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
232
232
  //# sourceMappingURL=platform-server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {ɵHTTP_FETCH_MAX_RESPONSE_SIZE as HTTP_FETCH_MAX_RESPONSE_SIZE} from '@angular/common/http';\nimport {PLATFORM_SERVER_PROVIDERS} from './server';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @param options An object to configure the server providers. Currently supports the following options:\n * - `maxResponseBodySize`: The maximum allowed response body size when using the Fetch API.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nexport function provideServerRendering(options?: {\n maxResponseBodySize: number;\n}): EnvironmentProviders {\n if (typeof ngServerMode === 'undefined') {\n globalThis['ngServerMode'] = true;\n }\n\n const providers = [...PLATFORM_SERVER_PROVIDERS];\n if (options?.maxResponseBodySize) {\n providers.push({provide: HTTP_FETCH_MAX_RESPONSE_SIZE, useValue: options.maxResponseBodySize});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n APP_ID,\n ApplicationRef,\n CSP_NONCE,\n InjectionToken,\n PlatformRef,\n Provider,\n Renderer2,\n StaticProvider,\n Type,\n ɵannotateForHydration as annotateForHydration,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER as INTERNAL_APPLICATION_ERROR_HANDLER,\n ɵIS_HYDRATION_DOM_REUSE_ENABLED as IS_HYDRATION_DOM_REUSE_ENABLED,\n ɵSSR_CONTENT_INTEGRITY_MARKER as SSR_CONTENT_INTEGRITY_MARKER,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\nimport {resolveUrl} from './url';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string') {\n const parsedUrl = resolveUrl(url);\n if (parsedUrl !== null) {\n const hostname = parsedUrl.hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new Error(`Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`);\n }\n }\n }\n}\n\n/**\n * Checks if the hostname is allowed.\n * @param hostname - The hostname to check.\n * @param allowedHosts - A set of allowed hostnames.\n * @returns `true` if the hostname is allowed, `false` otherwise.\n * @note Used also in `@angular/ssr`.\n * @private\n */\nexport function isHostAllowed(hostname: string, allowedHosts: ReadonlySet<string>): boolean {\n if (allowedHosts.has('*') || allowedHosts.has(hostname)) {\n return true;\n }\n\n for (const allowedHost of allowedHosts) {\n if (!allowedHost.startsWith('*.')) {\n continue;\n }\n\n const domain = allowedHost.slice(1);\n if (hostname.endsWith(domain)) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.0-rc.3');\n"],"names":["provideServerRendering","options","ngServerMode","globalThis","providers","PLATFORM_SERVER_PROVIDERS","maxResponseBodySize","push","provide","HTTP_FETCH_MAX_RESPONSE_SIZE","useValue","makeEnvironmentProviders","EVENT_DISPATCH_SCRIPT_ID","createServerPlatform","extraProviders","platformProviders","measuringLabel","startMeasuring","document","url","platform","platformServer","INITIAL_CONFIG","stopMeasuring","findEventDispatchScript","doc","getElementById","removeEventDispatchScript","remove","prepareForHydration","platformState","applicationRef","environmentInjector","injector","getDocument","get","IS_HYDRATION_DOM_REUSE_ENABLED","appendSsrContentIntegrityMarker","eventTypesToReplay","annotateForHydration","regular","size","capture","insertEventRecordScript","APP_ID","CSP_NONCE","comment","createComment","SSR_CONTENT_INTEGRITY_MARKER","body","firstChild","insertBefore","append","appendServerContextInfo","serverContext","sanitizeServerContext","SERVER_CONTEXT","DEFAULT_SERVER_CONTEXT","components","forEach","componentRef","renderer","Renderer2","element","location","nativeElement","setAttribute","appId","nonce","eventDispatchScript","replayScriptContents","JSON","stringify","Array","from","replayScript","createScript","after","renderInternal","platformRef","PlatformState","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","callbacks","BEFORE_APP_SERIALIZED","asyncCallbacks","callback","callbackResult","e","length","result","Promise","allSettled","status","reason","renderToString","asyncDestroyPlatform","resolve","setTimeout","destroy","InjectionToken","context","replace","renderModule","moduleType","allowedHosts","validateAllowedHosts","moduleRef","bootstrapModule","ApplicationRef","whenStable","renderApplication","bootstrap","renderAppLabel","bootstrapLabel","_renderLabel","rendered","parsedUrl","resolveUrl","hostname","allowedHostsSet","Set","isHostAllowed","Error","has","allowedHost","startsWith","domain","slice","endsWith","VERSION","Version"],"mappings":"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"}
1
+ {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {ɵHTTP_FETCH_MAX_RESPONSE_SIZE as HTTP_FETCH_MAX_RESPONSE_SIZE} from '@angular/common/http';\nimport {PLATFORM_SERVER_PROVIDERS} from './server';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @param options An object to configure the server providers. Currently supports the following options:\n * - `maxResponseBodySize`: The maximum allowed response body size when using the Fetch API.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nexport function provideServerRendering(options?: {\n maxResponseBodySize: number;\n}): EnvironmentProviders {\n if (typeof ngServerMode === 'undefined') {\n globalThis['ngServerMode'] = true;\n }\n\n const providers = [...PLATFORM_SERVER_PROVIDERS];\n if (options?.maxResponseBodySize) {\n providers.push({provide: HTTP_FETCH_MAX_RESPONSE_SIZE, useValue: options.maxResponseBodySize});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n APP_ID,\n ApplicationRef,\n CSP_NONCE,\n InjectionToken,\n PlatformRef,\n Provider,\n Renderer2,\n StaticProvider,\n Type,\n ɵannotateForHydration as annotateForHydration,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER as INTERNAL_APPLICATION_ERROR_HANDLER,\n ɵIS_HYDRATION_DOM_REUSE_ENABLED as IS_HYDRATION_DOM_REUSE_ENABLED,\n ɵSSR_CONTENT_INTEGRITY_MARKER as SSR_CONTENT_INTEGRITY_MARKER,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\nimport {resolveUrl} from './url';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string') {\n const parsedUrl = resolveUrl(url);\n if (parsedUrl !== null) {\n const hostname = parsedUrl.hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new Error(`Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`);\n }\n }\n }\n}\n\n/**\n * Checks if the hostname is allowed.\n * @param hostname - The hostname to check.\n * @param allowedHosts - A set of allowed hostnames.\n * @returns `true` if the hostname is allowed, `false` otherwise.\n * @note Used also in `@angular/ssr`.\n * @private\n */\nexport function isHostAllowed(hostname: string, allowedHosts: ReadonlySet<string>): boolean {\n if (allowedHosts.has('*') || allowedHosts.has(hostname)) {\n return true;\n }\n\n for (const allowedHost of allowedHosts) {\n if (!allowedHost.startsWith('*.')) {\n continue;\n }\n\n const domain = allowedHost.slice(1);\n if (hostname.endsWith(domain)) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.0');\n"],"names":["provideServerRendering","options","ngServerMode","globalThis","providers","PLATFORM_SERVER_PROVIDERS","maxResponseBodySize","push","provide","HTTP_FETCH_MAX_RESPONSE_SIZE","useValue","makeEnvironmentProviders","EVENT_DISPATCH_SCRIPT_ID","createServerPlatform","extraProviders","platformProviders","measuringLabel","startMeasuring","document","url","platform","platformServer","INITIAL_CONFIG","stopMeasuring","findEventDispatchScript","doc","getElementById","removeEventDispatchScript","remove","prepareForHydration","platformState","applicationRef","environmentInjector","injector","getDocument","get","IS_HYDRATION_DOM_REUSE_ENABLED","appendSsrContentIntegrityMarker","eventTypesToReplay","annotateForHydration","regular","size","capture","insertEventRecordScript","APP_ID","CSP_NONCE","comment","createComment","SSR_CONTENT_INTEGRITY_MARKER","body","firstChild","insertBefore","append","appendServerContextInfo","serverContext","sanitizeServerContext","SERVER_CONTEXT","DEFAULT_SERVER_CONTEXT","components","forEach","componentRef","renderer","Renderer2","element","location","nativeElement","setAttribute","appId","nonce","eventDispatchScript","replayScriptContents","JSON","stringify","Array","from","replayScript","createScript","after","renderInternal","platformRef","PlatformState","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","callbacks","BEFORE_APP_SERIALIZED","asyncCallbacks","callback","callbackResult","e","length","result","Promise","allSettled","status","reason","renderToString","asyncDestroyPlatform","resolve","setTimeout","destroy","InjectionToken","context","replace","renderModule","moduleType","allowedHosts","validateAllowedHosts","moduleRef","bootstrapModule","ApplicationRef","whenStable","renderApplication","bootstrap","renderAppLabel","bootstrapLabel","_renderLabel","rendered","parsedUrl","resolveUrl","hostname","allowedHostsSet","Set","isHostAllowed","Error","has","allowedHost","startsWith","domain","slice","endsWith","VERSION","Version"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -19,7 +19,7 @@ const platformServerTesting = createPlatformFactory(platformCore, 'serverTesting
19
19
  class ServerTestingModule {
20
20
  static ɵfac = i0.ɵɵngDeclareFactory({
21
21
  minVersion: "12.0.0",
22
- version: "22.0.0-rc.3",
22
+ version: "22.0.0",
23
23
  ngImport: i0,
24
24
  type: ServerTestingModule,
25
25
  deps: [],
@@ -27,14 +27,14 @@ class ServerTestingModule {
27
27
  });
28
28
  static ɵmod = i0.ɵɵngDeclareNgModule({
29
29
  minVersion: "14.0.0",
30
- version: "22.0.0-rc.3",
30
+ version: "22.0.0",
31
31
  ngImport: i0,
32
32
  type: ServerTestingModule,
33
33
  exports: [BrowserDynamicTestingModule]
34
34
  });
35
35
  static ɵinj = i0.ɵɵngDeclareInjector({
36
36
  minVersion: "12.0.0",
37
- version: "22.0.0-rc.3",
37
+ version: "22.0.0",
38
38
  ngImport: i0,
39
39
  type: ServerTestingModule,
40
40
  providers: SERVER_RENDER_PROVIDERS,
@@ -43,7 +43,7 @@ class ServerTestingModule {
43
43
  }
44
44
  i0.ɵɵngDeclareClassMetadata({
45
45
  minVersion: "12.0.0",
46
- version: "22.0.0-rc.3",
46
+ version: "22.0.0",
47
47
  ngImport: i0,
48
48
  type: ServerTestingModule,
49
49
  decorators: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/platform-server",
3
- "version": "22.0.0-rc.3",
3
+ "version": "22.0.0",
4
4
  "description": "Angular - library for using Angular in Node.js",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -8,10 +8,10 @@
8
8
  "node": "^22.22.3 || ^24.15.0 || >=26.0.0"
9
9
  },
10
10
  "peerDependencies": {
11
- "@angular/common": "22.0.0-rc.3",
12
- "@angular/compiler": "22.0.0-rc.3",
13
- "@angular/core": "22.0.0-rc.3",
14
- "@angular/platform-browser": "22.0.0-rc.3",
11
+ "@angular/common": "22.0.0",
12
+ "@angular/compiler": "22.0.0",
13
+ "@angular/core": "22.0.0",
14
+ "@angular/platform-browser": "22.0.0",
15
15
  "rxjs": "^6.5.3 || ^7.4.0"
16
16
  },
17
17
  "dependencies": {
package/types/init.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.3
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */