@angular/platform-browser 22.0.5 → 22.0.7

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,53 +1,44 @@
1
1
  /**
2
- * @license Angular v22.0.5
2
+ * @license Angular v22.0.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  export { BrowserModule, bootstrapApplication, createApplication, platformBrowser, provideProtractorTestingSupport, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserGetTestability as ɵBrowserGetTestability, KeyEventsPlugin as ɵKeyEventsPlugin } from './_browser-chunk.mjs';
8
- import { ɵgetDOM as _getDOM, DOCUMENT } from '@angular/common';
8
+ import { DOCUMENT, ɵgetDOM as _getDOM } from '@angular/common';
9
9
  export { ɵgetDOM } from '@angular/common';
10
10
  import * as i0 from '@angular/core';
11
- import { Inject, Injectable, ɵglobal as _global, ApplicationRef, ɵRuntimeError as _RuntimeError, makeEnvironmentProviders, ɵCACHE_ACTIVE as _CACHE_ACTIVE, APP_BOOTSTRAP_LISTENER, provideStabilityDebugging, ɵwithDomHydration as _withDomHydration, ɵwithIncrementalHydration as _withIncrementalHydration, inject, ɵwithEventReplay as _withEventReplay, ɵwithI18nSupport as _withI18nSupport, ENVIRONMENT_INITIALIZER, ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, ɵConsole as _Console, ɵformatRuntimeError as _formatRuntimeError, ɵXSS_SECURITY_URL as _XSS_SECURITY_URL, SecurityContext, ɵallowSanitizationBypassAndThrow as _allowSanitizationBypassAndThrow, ɵunwrapSafeValue as _unwrapSafeValue, ɵ_sanitizeUrl as __sanitizeUrl, ɵ_sanitizeHtml as __sanitizeHtml, ɵbypassSanitizationTrustHtml as _bypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle as _bypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript as _bypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl as _bypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl as _bypassSanitizationTrustResourceUrl, forwardRef, Service, Version } from '@angular/core';
11
+ import { inject, Service, Inject, Injectable, ɵglobal as _global, ApplicationRef, ɵRuntimeError as _RuntimeError, makeEnvironmentProviders, ɵCACHE_ACTIVE as _CACHE_ACTIVE, APP_BOOTSTRAP_LISTENER, provideStabilityDebugging, ɵwithDomHydration as _withDomHydration, ɵwithIncrementalHydration as _withIncrementalHydration, ɵwithEventReplay as _withEventReplay, ɵwithI18nSupport as _withI18nSupport, ENVIRONMENT_INITIALIZER, ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, ɵConsole as _Console, ɵformatRuntimeError as _formatRuntimeError, ɵXSS_SECURITY_URL as _XSS_SECURITY_URL, SecurityContext, ɵallowSanitizationBypassAndThrow as _allowSanitizationBypassAndThrow, ɵunwrapSafeValue as _unwrapSafeValue, ɵ_sanitizeUrl as __sanitizeUrl, ɵ_sanitizeHtml as __sanitizeHtml, ɵbypassSanitizationTrustHtml as _bypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle as _bypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript as _bypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl as _bypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl as _bypassSanitizationTrustResourceUrl, forwardRef, Version } from '@angular/core';
12
12
  export { EVENT_MANAGER_PLUGINS, EventManager, EventManagerPlugin, REMOVE_STYLES_ON_COMPONENT_DESTROY, DomEventsPlugin as ɵDomEventsPlugin, DomRendererFactory2 as ɵDomRendererFactory2, SharedStylesHost as ɵSharedStylesHost } from './_dom_renderer-chunk.mjs';
13
13
  import { ɵwithHttpTransferCache as _withHttpTransferCache } from '@angular/common/http';
14
14
 
15
15
  class Meta {
16
- _doc;
17
- _dom;
18
- constructor(_doc) {
19
- this._doc = _doc;
20
- this._dom = _getDOM();
21
- }
16
+ _doc = inject(DOCUMENT);
17
+ _dom = _getDOM();
18
+ _cachedHead;
22
19
  addTag(tag, forceCreation = false) {
23
20
  if (!tag) return null;
24
21
  return this._getOrCreateElement(tag, forceCreation);
25
22
  }
26
23
  addTags(tags, forceCreation = false) {
27
- if (!tags) return [];
28
- return tags.reduce((result, tag) => {
29
- if (tag) {
30
- result.push(this._getOrCreateElement(tag, forceCreation));
31
- }
32
- return result;
33
- }, []);
24
+ return tags.filter(tag => !!tag).map(tag => this._getOrCreateElement(tag, forceCreation));
34
25
  }
35
26
  getTag(attrSelector) {
36
27
  if (!attrSelector) return null;
37
- const meta = this._doc.querySelector(`meta[${attrSelector}]`);
38
- return meta?.nodeName.toLowerCase() === 'meta' ? meta : null;
28
+ const meta = this._doc.querySelector(buildMetaSelector(attrSelector));
29
+ return isMetaTag(meta) ? meta : null;
39
30
  }
40
31
  getTags(attrSelector) {
41
32
  if (!attrSelector) return [];
42
- const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);
43
- return list ? [].slice.call(list).filter(elem => elem.nodeName.toLowerCase() === 'meta') : [];
33
+ const list = this._doc.querySelectorAll(buildMetaSelector(attrSelector));
34
+ return list ? Array.from(list).filter(elem => isMetaTag(elem)) : [];
44
35
  }
45
36
  updateTag(tag, selector) {
46
- if (!tag) return null;
47
- selector = selector || this._parseSelector(tag);
37
+ selector ??= parseSelector(tag);
48
38
  const meta = this.getTag(selector);
49
39
  if (meta) {
50
- return this._setMetaElementAttributes(tag, meta);
40
+ setMetaElementAttributes(tag, meta);
41
+ return meta;
51
42
  }
52
43
  return this._getOrCreateElement(tag, true);
53
44
  }
@@ -61,70 +52,62 @@ class Meta {
61
52
  }
62
53
  _getOrCreateElement(meta, forceCreation = false) {
63
54
  if (!forceCreation) {
64
- const selector = this._parseSelector(meta);
65
- const elem = this.getTags(selector).filter(elem => this._containsAttributes(meta, elem))[0];
55
+ const selector = parseSelector(meta);
56
+ const elem = this.getTags(selector).filter(elem => containsAttributes(meta, elem))[0];
66
57
  if (elem !== undefined) return elem;
67
58
  }
68
59
  const element = this._dom.createElement('meta');
69
- this._setMetaElementAttributes(meta, element);
60
+ setMetaElementAttributes(meta, element);
70
61
  const head = this._doc.getElementsByTagName('head')[0];
71
62
  head.appendChild(element);
72
63
  return element;
73
64
  }
74
- _setMetaElementAttributes(tag, el) {
75
- Object.keys(tag).forEach(prop => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));
76
- return el;
77
- }
78
- _parseSelector(tag) {
79
- const attr = tag.name ? 'name' : 'property';
80
- return `${attr}=${this._escapeSelectorValue(String(tag[attr]))}`;
81
- }
82
- _escapeSelectorValue(value) {
83
- return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
84
- }
85
- _containsAttributes(tag, elem) {
86
- return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
87
- }
88
- _getMetaKeyMap(prop) {
89
- return META_KEYS_MAP[prop] || prop;
90
- }
91
65
  static ɵfac = i0.ɵɵngDeclareFactory({
92
66
  minVersion: "12.0.0",
93
- version: "22.0.5",
67
+ version: "22.0.7",
94
68
  ngImport: i0,
95
69
  type: Meta,
96
- deps: [{
97
- token: DOCUMENT
98
- }],
99
- target: i0.ɵɵFactoryTarget.Injectable
70
+ deps: [],
71
+ target: i0.ɵɵFactoryTarget.Service
100
72
  });
101
- static ɵprov = i0.ɵɵngDeclareInjectable({
102
- minVersion: "12.0.0",
103
- version: "22.0.5",
73
+ static ɵprov = i0.ɵɵngDeclareService({
74
+ minVersion: "22.0.0",
75
+ version: "22.0.7",
104
76
  ngImport: i0,
105
- type: Meta,
106
- providedIn: 'root'
77
+ type: Meta
107
78
  });
108
79
  }
109
80
  i0.ɵɵngDeclareClassMetadata({
110
81
  minVersion: "12.0.0",
111
- version: "22.0.5",
82
+ version: "22.0.7",
112
83
  ngImport: i0,
113
84
  type: Meta,
114
85
  decorators: [{
115
- type: Injectable,
116
- args: [{
117
- providedIn: 'root'
118
- }]
119
- }],
120
- ctorParameters: () => [{
121
- type: undefined,
122
- decorators: [{
123
- type: Inject,
124
- args: [DOCUMENT]
125
- }]
86
+ type: Service
126
87
  }]
127
88
  });
89
+ function buildMetaSelector(attrSelector) {
90
+ return `meta[${attrSelector}]`;
91
+ }
92
+ function setMetaElementAttributes(tag, el) {
93
+ Object.keys(tag).forEach(prop => el.setAttribute(getMetaKeyMap(prop), tag[prop]));
94
+ }
95
+ function parseSelector(tag) {
96
+ const attr = tag.name ? 'name' : 'property';
97
+ return `${attr}=${escapeSelectorValue(String(tag[attr]))}`;
98
+ }
99
+ function escapeSelectorValue(value) {
100
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
101
+ }
102
+ function containsAttributes(tag, elem) {
103
+ return Object.keys(tag).every(key => elem.getAttribute(getMetaKeyMap(key)) === tag[key]);
104
+ }
105
+ function getMetaKeyMap(prop) {
106
+ return META_KEYS_MAP[prop] || prop;
107
+ }
108
+ function isMetaTag(tag) {
109
+ return tag?.nodeName.toLowerCase() === 'meta';
110
+ }
128
111
  const META_KEYS_MAP = {
129
112
  httpEquiv: 'http-equiv'
130
113
  };
@@ -142,7 +125,7 @@ class Title {
142
125
  }
143
126
  static ɵfac = i0.ɵɵngDeclareFactory({
144
127
  minVersion: "12.0.0",
145
- version: "22.0.5",
128
+ version: "22.0.7",
146
129
  ngImport: i0,
147
130
  type: Title,
148
131
  deps: [{
@@ -152,7 +135,7 @@ class Title {
152
135
  });
153
136
  static ɵprov = i0.ɵɵngDeclareInjectable({
154
137
  minVersion: "12.0.0",
155
- version: "22.0.5",
138
+ version: "22.0.7",
156
139
  ngImport: i0,
157
140
  type: Title,
158
141
  providedIn: 'root'
@@ -160,7 +143,7 @@ class Title {
160
143
  }
161
144
  i0.ɵɵngDeclareClassMetadata({
162
145
  minVersion: "12.0.0",
163
- version: "22.0.5",
146
+ version: "22.0.7",
164
147
  ngImport: i0,
165
148
  type: Title,
166
149
  decorators: [{
@@ -343,7 +326,7 @@ function provideClientHydration(...features) {
343
326
  class DomSanitizer {
344
327
  static ɵfac = i0.ɵɵngDeclareFactory({
345
328
  minVersion: "12.0.0",
346
- version: "22.0.5",
329
+ version: "22.0.7",
347
330
  ngImport: i0,
348
331
  type: DomSanitizer,
349
332
  deps: [],
@@ -351,7 +334,7 @@ class DomSanitizer {
351
334
  });
352
335
  static ɵprov = i0.ɵɵngDeclareInjectable({
353
336
  minVersion: "12.0.0",
354
- version: "22.0.5",
337
+ version: "22.0.7",
355
338
  ngImport: i0,
356
339
  type: DomSanitizer,
357
340
  providedIn: 'root',
@@ -360,7 +343,7 @@ class DomSanitizer {
360
343
  }
361
344
  i0.ɵɵngDeclareClassMetadata({
362
345
  minVersion: "12.0.0",
363
- version: "22.0.5",
346
+ version: "22.0.7",
364
347
  ngImport: i0,
365
348
  type: DomSanitizer,
366
349
  decorators: [{
@@ -402,7 +385,7 @@ class DomSanitizerImpl extends DomSanitizer {
402
385
  if (_allowSanitizationBypassAndThrow(value, "ResourceURL")) {
403
386
  return _unwrapSafeValue(value);
404
387
  }
405
- throw new _RuntimeError(5201, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${_XSS_SECURITY_URL})`);
388
+ throw new _RuntimeError(-5201, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${_XSS_SECURITY_URL})`);
406
389
  default:
407
390
  throw new _RuntimeError(5202, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${_XSS_SECURITY_URL})`);
408
391
  }
@@ -424,7 +407,7 @@ class DomSanitizerImpl extends DomSanitizer {
424
407
  }
425
408
  static ɵfac = i0.ɵɵngDeclareFactory({
426
409
  minVersion: "12.0.0",
427
- version: "22.0.5",
410
+ version: "22.0.7",
428
411
  ngImport: i0,
429
412
  type: DomSanitizerImpl,
430
413
  deps: [],
@@ -432,14 +415,14 @@ class DomSanitizerImpl extends DomSanitizer {
432
415
  });
433
416
  static ɵprov = i0.ɵɵngDeclareService({
434
417
  minVersion: "22.0.0",
435
- version: "22.0.5",
418
+ version: "22.0.7",
436
419
  ngImport: i0,
437
420
  type: DomSanitizerImpl
438
421
  });
439
422
  }
440
423
  i0.ɵɵngDeclareClassMetadata({
441
424
  minVersion: "12.0.0",
442
- version: "22.0.5",
425
+ version: "22.0.7",
443
426
  ngImport: i0,
444
427
  type: DomSanitizerImpl,
445
428
  decorators: [{
@@ -447,7 +430,7 @@ i0.ɵɵngDeclareClassMetadata({
447
430
  }]
448
431
  });
449
432
 
450
- const VERSION = /* @__PURE__ */new Version('22.0.5');
433
+ const VERSION = /* @__PURE__ */new Version('22.0.7');
451
434
 
452
435
  export { By, DomSanitizer, HydrationFeatureKind, Meta, Title, VERSION, disableDebugTools, enableDebugTools, provideClientHydration, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, withNoIncrementalHydration, DomSanitizerImpl as ɵDomSanitizerImpl };
453
436
  //# sourceMappingURL=platform-browser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-browser.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/meta.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/title.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/util.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/common_tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/debug/by.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/hydration.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/security/dom_sanitization_service.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/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 {DOCUMENT, ɵDomAdapter as DomAdapter, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n/**\n * Represents the attributes of an HTML `<meta>` element. The element itself is\n * represented by the internal `HTMLMetaElement`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see {@link Meta}\n *\n * @publicApi\n */\nexport type MetaDefinition = {\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n} & {\n // TODO(IgorMinar): this type looks wrong\n [prop: string]: string;\n};\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Meta {\n private _dom: DomAdapter;\n constructor(@Inject(DOCUMENT) private _doc: any) {\n this._dom = getDOM();\n }\n /**\n * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * If an existing element is found, it is returned and is not modified in any way.\n * @param tag The definition of a `<meta>` element to match or create.\n * @param forceCreation True to create a new element without checking whether one already exists.\n * @returns The existing element with the same attributes and values if found,\n * the new element if no match is found, or `null` if the tag parameter is not defined.\n */\n addTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement | null {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n\n /**\n * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * @param tags An array of tag definitions to match or create.\n * @param forceCreation True to create new elements without checking whether they already exist.\n * @returns The matching elements if found, or the new elements.\n */\n addTags(tags: MetaDefinition[], forceCreation: boolean = false): HTMLMetaElement[] {\n if (!tags) return [];\n return tags.reduce((result: HTMLMetaElement[], tag: MetaDefinition) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n\n /**\n * Retrieves a `<meta>` tag element in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching element, if any.\n */\n getTag(attrSelector: string): HTMLMetaElement | null {\n if (!attrSelector) return null;\n const meta = this._doc.querySelector(`meta[${attrSelector}]`);\n return meta?.nodeName.toLowerCase() === 'meta' ? meta : null;\n }\n\n /**\n * Retrieves a set of `<meta>` tag elements in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching elements, if any.\n */\n getTags(attrSelector: string): HTMLMetaElement[] {\n if (!attrSelector) return [];\n const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n return list\n ? (([].slice.call(list) as HTMLElement[]).filter(\n (elem) => elem.nodeName.toLowerCase() === 'meta',\n ) as HTMLMetaElement[])\n : [];\n }\n\n /**\n * Modifies an existing `<meta>` tag element in the current HTML document.\n * @param tag The tag description with which to replace the existing tag content.\n * @param selector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n * replacement tag.\n * @return The modified element.\n */\n updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const meta: HTMLMetaElement = this.getTag(selector)!;\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param attrSelector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n */\n removeTag(attrSelector: string): void {\n this.removeTagElement(this.getTag(attrSelector)!);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param meta The tag definition to match against to identify an existing tag.\n */\n removeTagElement(meta: HTMLMetaElement): void {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n\n private _getOrCreateElement(\n meta: MetaDefinition,\n forceCreation: boolean = false,\n ): HTMLMetaElement {\n if (!forceCreation) {\n const selector: string = this._parseSelector(meta);\n // It's allowed to have multiple elements with the same name so it's not enough to\n // just check that element with the same name already present on the page. We also need to\n // check if element has tag attributes\n const elem = this.getTags(selector).filter((elem) => this._containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element: HTMLMetaElement = this._dom.createElement('meta') as HTMLMetaElement;\n this._setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n\n private _setMetaElementAttributes(tag: MetaDefinition, el: HTMLMetaElement): HTMLMetaElement {\n Object.keys(tag).forEach((prop: string) =>\n el.setAttribute(this._getMetaKeyMap(prop), tag[prop]),\n );\n return el;\n }\n\n private _parseSelector(tag: MetaDefinition): string {\n const attr: string = tag.name ? 'name' : 'property';\n return `${attr}=${this._escapeSelectorValue(String(tag[attr]))}`;\n }\n\n private _escapeSelectorValue(value: string): string {\n // Escape backslashes and double quotes to prevent CSS selector injection.\n // This securely confines the value inside an attribute selector.\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n\n private _containsAttributes(tag: MetaDefinition, elem: HTMLMetaElement): boolean {\n return Object.keys(tag).every(\n (key: string) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key],\n );\n }\n\n private _getMetaKeyMap(prop: string): string {\n return META_KEYS_MAP[prop] || prop;\n }\n}\n\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP: {[prop: string]: string} = {\n httpEquiv: 'http-equiv',\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 {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Title {\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n /**\n * Get the title of the current HTML document.\n */\n getTitle(): string {\n return this._doc.title;\n }\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string) {\n this._doc.title = newTitle || '';\n }\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/// <reference path=\"../../../goog.d.ts\" />\n\nimport {ɵglobal as global} from '@angular/core';\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nexport function exportNgVar(name: string, value: any): void {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n const ng = (global['ng'] = (global['ng'] as {[key: string]: any} | undefined) || {});\n ng[name] = value;\n }\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 {ApplicationRef, ComponentRef} from '@angular/core';\n\nexport class ChangeDetectionPerfRecord {\n constructor(\n public msPerTick: number,\n public numTicks: number,\n ) {}\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n appRef: ApplicationRef;\n\n constructor(ref: ComponentRef<any>) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n\n // tslint:disable:no-console\n /**\n * Exercises change detection in a loop and then prints the average amount of\n * time in milliseconds how long a single round of change detection takes for\n * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n * of 500 milliseconds.\n *\n * Optionally, a user may pass a `config` parameter containing a map of\n * options. Supported options are:\n *\n * `record` (boolean) - causes the profiler to record a CPU profile while\n * it exercises the change detector. Example:\n *\n * ```ts\n * ng.profiler.timeChangeDetection({record: true})\n * ```\n */\n timeChangeDetection(config: any): ChangeDetectionPerfRecord {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n // Profiler is not available in Android browsers without dev tools opened\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\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 {ComponentRef} from '@angular/core';\n\nimport {exportNgVar} from '../../dom/util';\n\nimport {AngularProfiler} from './common_tools';\n\nconst PROFILER_GLOBAL_NAME = 'profiler';\n\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n * then hit Enter.\n *\n * @publicApi\n */\nexport function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T> {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nexport function disableDebugTools(): void {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\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 {ɵgetDOM as getDOM} from '@angular/common';\nimport {DebugElement, DebugNode, Predicate, Type} from '@angular/core';\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nexport class By {\n /**\n * Match all nodes.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\n static all(): Predicate<DebugNode> {\n return () => true;\n }\n\n /**\n * Match elements by the given CSS selector.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n */\n static css(selector: string): Predicate<DebugElement> {\n return (debugElement) => {\n return debugElement.nativeElement != null\n ? elementMatches(debugElement.nativeElement, selector)\n : false;\n };\n }\n\n /**\n * Match nodes that have the given directive present.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n */\n static directive(type: Type<any>): Predicate<DebugNode> {\n return (debugNode) => debugNode.providerTokens!.indexOf(type) !== -1;\n }\n}\n\nfunction elementMatches(n: any, selector: string): boolean {\n if (getDOM().isElementNode(n)) {\n return (\n (n.matches && n.matches(selector)) ||\n (n.msMatchesSelector && n.msMatchesSelector(selector)) ||\n (n.webkitMatchesSelector && n.webkitMatchesSelector(selector))\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\nimport {HttpTransferCacheOptions, ɵwithHttpTransferCache} from '@angular/common/http';\nimport {\n APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n ɵCACHE_ACTIVE as CACHE_ACTIVE,\n ɵConsole as Console,\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n ɵformatRuntimeError as formatRuntimeError,\n inject,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n makeEnvironmentProviders,\n Provider,\n provideStabilityDebugging,\n ɵRuntimeError as RuntimeError,\n ɵwithDomHydration as withDomHydration,\n ɵwithEventReplay,\n ɵwithI18nSupport,\n ɵwithIncrementalHydration,\n} from '@angular/core';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nexport enum HydrationFeatureKind {\n NoHttpTransferCache,\n HttpTransferCacheOptions,\n I18nSupport,\n EventReplay,\n IncrementalHydration,\n NoIncrementalHydration,\n}\n\n/**\n * Helper type to represent a Hydration feature.\n *\n * @publicApi\n */\nexport interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature<FeatureKind extends HydrationFeatureKind>(\n ɵkind: FeatureKind,\n ɵproviders: Provider[] = [],\n ɵoptions: unknown = {},\n): HydrationFeature<FeatureKind> {\n return {ɵkind, ɵproviders};\n}\n\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @see [Disabling Caching](guide/ssr#disabling-caching)\n *\n * @publicApi\n */\nexport function withNoHttpTransferCache(): HydrationFeature<HydrationFeatureKind.NoHttpTransferCache> {\n // This feature has no providers and acts as a flag that turns off\n // HTTP transfer cache (which otherwise is turned on by default).\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @see [Configuring HTTP transfer cache options](guide/ssr#caching-data-when-using-httpclient)\n *\n * @publicApi\n */\nexport function withHttpTransferCacheOptions(\n options: HttpTransferCacheOptions,\n): HydrationFeature<HydrationFeatureKind.HttpTransferCacheOptions> {\n // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n return hydrationFeature(\n HydrationFeatureKind.HttpTransferCacheOptions,\n ɵwithHttpTransferCache(options),\n );\n}\n\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @publicApi 20.0\n */\nexport function withI18nSupport(): HydrationFeature<HydrationFeatureKind.I18nSupport> {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nexport function withEventReplay(): HydrationFeature<HydrationFeatureKind.EventReplay> {\n return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @publicApi 20.0\n * @see {@link provideClientHydration}\n *\n * @deprecated Since v22.0.0, incremental hydration is enabled by default with `provideClientHydration`.\n * Intent to remove in v24.\n */\nexport function withIncrementalHydration(): HydrationFeature<HydrationFeatureKind.IncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n\n/**\n * Disables support for incremental hydration (which is enabled by default).\n *\n * @publicApi 22.0\n * @see {@link provideClientHydration}\n */\nexport function withNoIncrementalHydration(): HydrationFeature<HydrationFeatureKind.NoIncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.NoIncrementalHydration);\n}\n\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether enabledBlocking initial navigation is used in an application\n * and logs a warning in a console if it's not compatible with hydration.\n */\nfunction provideEnabledBlockingInitialNavigationDetector(): Provider[] {\n return [\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true,\n });\n\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(Console);\n const message = formatRuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both hydration and enabledBlocking initial navigation ' +\n 'in the same application, which is a contradiction.',\n );\n console.warn(message);\n }\n },\n multi: true,\n },\n ];\n}\n\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n * Incremental hydration. [Learn more](guide/incremental-hydration).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n * * {@link withNoIncrementalHydration} to disable incremental hydration\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n * declarations: [RootCmp],\n * bootstrap: [RootCmp],\n * providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n * @see {@link withNoIncrementalHydration}\n *\n * @param features Optional features to configure additional hydration behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi 17.0\n */\nexport function provideClientHydration(\n ...features: HydrationFeature<HydrationFeatureKind>[]\n): EnvironmentProviders {\n const providers: Provider[] = [];\n const featuresKind = new Set<HydrationFeatureKind>();\n\n for (const {ɵproviders, ɵkind} of features) {\n featuresKind.add(ɵkind);\n\n if (ɵproviders.length) {\n providers.push(ɵproviders);\n }\n }\n\n const hasHttpTransferCacheOptions = featuresKind.has(\n HydrationFeatureKind.HttpTransferCacheOptions,\n );\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n if (featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n if (\n featuresKind.has(HydrationFeatureKind.IncrementalHydration) &&\n featuresKind.has(HydrationFeatureKind.NoIncrementalHydration)\n ) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withIncrementalHydration() and withNoIncrementalHydration() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n }\n\n return makeEnvironmentProviders([\n typeof ngDevMode !== 'undefined' && ngDevMode\n ? provideEnabledBlockingInitialNavigationDetector()\n : [],\n typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [],\n withDomHydration(),\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions\n ? []\n : ɵwithHttpTransferCache({}),\n featuresKind.has(HydrationFeatureKind.NoIncrementalHydration)\n ? []\n : ɵwithIncrementalHydration(),\n providers,\n {\n provide: CACHE_ACTIVE,\n useValue: {isActive: true},\n },\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const cacheState = inject(CACHE_ACTIVE);\n\n return () => {\n appRef.whenStable().then(() => {\n cacheState.isActive = false;\n });\n };\n },\n },\n ]);\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 {DOCUMENT} from '@angular/common';\nimport {\n ɵ_sanitizeHtml as _sanitizeHtml,\n ɵ_sanitizeUrl as _sanitizeUrl,\n ɵallowSanitizationBypassAndThrow as allowSanitizationBypassOrThrow,\n ɵbypassSanitizationTrustHtml as bypassSanitizationTrustHtml,\n ɵbypassSanitizationTrustResourceUrl as bypassSanitizationTrustResourceUrl,\n ɵbypassSanitizationTrustScript as bypassSanitizationTrustScript,\n ɵbypassSanitizationTrustStyle as bypassSanitizationTrustStyle,\n ɵbypassSanitizationTrustUrl as bypassSanitizationTrustUrl,\n ɵBypassType as BypassType,\n forwardRef,\n inject,\n Injectable,\n ɵRuntimeError as RuntimeError,\n Sanitizer,\n SecurityContext,\n Service,\n ɵunwrapSafeValue as unwrapSafeValue,\n ɵXSS_SECURITY_URL as XSS_SECURITY_URL,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from '../errors';\n\nexport {SecurityContext};\n\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * @publicApi\n */\nexport interface SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * @publicApi\n */\nexport interface SafeHtml extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * @publicApi\n */\nexport interface SafeStyle extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * @publicApi\n */\nexport interface SafeScript extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * @publicApi\n */\nexport interface SafeUrl extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * @publicApi\n */\nexport interface SafeResourceUrl extends SafeValue {}\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: forwardRef(() => DomSanitizerImpl)})\nexport abstract class DomSanitizer implements Sanitizer {\n /**\n * Gets a safe value from either a known safe value or a value with unknown safety.\n *\n * If the given value is already a `SafeValue`, this method returns the unwrapped value.\n * If the security context is HTML and the given value is a plain string, this method\n * sanitizes the string, removing any potentially unsafe content.\n * For any other security context, this method throws an error if provided\n * with a plain string.\n */\n abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;\n\n /**\n * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\n * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\n * leave safe HTML intact, so in most situations this method should not be used.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustHtml(value: string): SafeHtml;\n\n /**\n * Bypass security and trust the given value to be safe style value (CSS).\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustStyle(value: string): SafeStyle;\n\n /**\n * Bypass security and trust the given value to be safe JavaScript.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustScript(value: string): SafeScript;\n\n /**\n * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\n * in hyperlinks or `<img src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustUrl(value: string): SafeUrl;\n\n /**\n * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\n * be used to load executable code from, like `<script src>`, or `<iframe src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\n}\n\n@Service()\nexport class DomSanitizerImpl extends DomSanitizer {\n private _doc = inject(DOCUMENT);\n override sanitize(ctx: SecurityContext, value: SafeValue | string | null): string | null {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value as string;\n case SecurityContext.HTML:\n if (allowSanitizationBypassOrThrow(value, BypassType.Html)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (allowSanitizationBypassOrThrow(value, BypassType.Style)) {\n return unwrapSafeValue(value);\n }\n return value as string;\n case SecurityContext.SCRIPT:\n if (allowSanitizationBypassOrThrow(value, BypassType.Script)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'unsafe value used in a script context',\n );\n case SecurityContext.URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.Url)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.ResourceUrl)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`,\n );\n default:\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`,\n );\n }\n }\n\n override bypassSecurityTrustHtml(value: string): SafeHtml {\n return bypassSanitizationTrustHtml(value);\n }\n override bypassSecurityTrustStyle(value: string): SafeStyle {\n return bypassSanitizationTrustStyle(value);\n }\n override bypassSecurityTrustScript(value: string): SafeScript {\n return bypassSanitizationTrustScript(value);\n }\n override bypassSecurityTrustUrl(value: string): SafeUrl {\n return bypassSanitizationTrustUrl(value);\n }\n override bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl {\n return bypassSanitizationTrustResourceUrl(value);\n }\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-browser package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.5');\n"],"names":["Meta","_doc","_dom","constructor","getDOM","addTag","tag","forceCreation","_getOrCreateElement","addTags","tags","reduce","result","push","getTag","attrSelector","meta","querySelector","nodeName","toLowerCase","getTags","list","querySelectorAll","slice","call","filter","elem","updateTag","selector","_parseSelector","_setMetaElementAttributes","removeTag","removeTagElement","remove","_containsAttributes","undefined","element","createElement","head","getElementsByTagName","appendChild","el","Object","keys","forEach","prop","setAttribute","_getMetaKeyMap","attr","name","_escapeSelectorValue","String","value","replace","every","key","getAttribute","META_KEYS_MAP","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","DOCUMENT","target","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","decorators","providedIn","Inject","httpEquiv","Title","getTitle","title","setTitle","newTitle","exportNgVar","COMPILED","ng","global","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","appRef","ref","injector","get","ApplicationRef","timeChangeDetection","config","record","profileName","console","profile","start","performance","now","tick","end","profileEnd","log","toFixed","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","By","all","css","debugElement","nativeElement","elementMatches","directive","debugNode","providerTokens","indexOf","n","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","HydrationFeatureKind","hydrationFeature","ɵkind","ɵproviders","ɵoptions","withNoHttpTransferCache","NoHttpTransferCache","withHttpTransferCacheOptions","options","HttpTransferCacheOptions","ɵwithHttpTransferCache","withI18nSupport","I18nSupport","ɵwithI18nSupport","withEventReplay","EventReplay","ɵwithEventReplay","withIncrementalHydration","IncrementalHydration","ɵwithIncrementalHydration","withNoIncrementalHydration","NoIncrementalHydration","provideEnabledBlockingInitialNavigationDetector","provide","ENVIRONMENT_INITIALIZER","useValue","isEnabledBlockingInitialNavigation","inject","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","optional","Console","message","formatRuntimeError","warn","multi","provideClientHydration","features","providers","featuresKind","Set","add","length","hasHttpTransferCacheOptions","has","ngDevMode","RuntimeError","makeEnvironmentProviders","provideStabilityDebugging","withDomHydration","CACHE_ACTIVE","isActive","APP_BOOTSTRAP_LISTENER","useFactory","cacheState","whenStable","then","DomSanitizer","deps","useExisting","forwardRef","DomSanitizerImpl","args","sanitize","ctx","SecurityContext","NONE","HTML","allowSanitizationBypassOrThrow","unwrapSafeValue","_sanitizeHtml","toString","STYLE","SCRIPT","URL","_sanitizeUrl","RESOURCE_URL","XSS_SECURITY_URL","bypassSecurityTrustHtml","bypassSanitizationTrustHtml","bypassSecurityTrustStyle","bypassSanitizationTrustStyle","bypassSecurityTrustScript","bypassSanitizationTrustScript","bypassSecurityTrustUrl","bypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","bypassSanitizationTrustResourceUrl","Service","VERSION","Version"],"mappings":"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"}
1
+ {"version":3,"file":"platform-browser.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/meta.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/title.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/util.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/common_tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/browser/tools/tools.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/dom/debug/by.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/hydration.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/src/security/dom_sanitization_service.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-browser/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 {DOCUMENT, ɵgetDOM as getDOM} from '@angular/common';\nimport {inject, Service} from '@angular/core';\n\n/**\n * Represents the attributes of an HTML `<meta>` element. The element itself is\n * represented by the internal `HTMLMetaElement`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see {@link Meta}\n *\n * @publicApi\n */\nexport type MetaDefinition = {\n charset?: string;\n content?: string;\n httpEquiv?: string;\n id?: string;\n itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n} & {\n // TODO(IgorMinar): this type looks wrong\n [prop: string]: string;\n};\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\n@Service()\nexport class Meta {\n private readonly _doc = inject(DOCUMENT);\n private readonly _dom = getDOM();\n private _cachedHead: HTMLHeadElement | undefined;\n\n /**\n * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * If an existing element is found, it is returned and is not modified in any way.\n * @param tag The definition of a `<meta>` element to match or create.\n * @param forceCreation True to create a new element without checking whether one already exists.\n * @returns The existing element with the same attributes and values if found,\n * the new element if no match is found, or `null` if the tag parameter is not defined.\n */\n addTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement | null {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n\n /**\n * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n * values in the provided tag definition, and verifies that all other attribute values are equal.\n * @param tags An array of tag definitions to match or create.\n * @param forceCreation True to create new elements without checking whether they already exist.\n * @returns The matching elements if found, or the new elements.\n */\n addTags(tags: MetaDefinition[], forceCreation: boolean = false): HTMLMetaElement[] {\n return tags\n .filter((tag): tag is MetaDefinition => !!tag)\n .map((tag) => this._getOrCreateElement(tag, forceCreation));\n }\n\n /**\n * Retrieves a `<meta>` tag element in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching element, if any.\n */\n getTag(attrSelector: string): HTMLMetaElement | null {\n if (!attrSelector) return null;\n const meta = this._doc.querySelector<HTMLMetaElement>(buildMetaSelector(attrSelector));\n return isMetaTag(meta) ? meta : null;\n }\n\n /**\n * Retrieves a set of `<meta>` tag elements in the current HTML document.\n * @param attrSelector The tag attribute and value to match against, in the format\n * `\"tag_attribute='value string'\"`.\n * @returns The matching elements, if any.\n */\n getTags(attrSelector: string): HTMLMetaElement[] {\n if (!attrSelector) return [];\n const list = this._doc.querySelectorAll<HTMLMetaElement>(buildMetaSelector(attrSelector));\n return list ? Array.from(list).filter((elem) => isMetaTag(elem)) : [];\n }\n\n /**\n * Modifies an existing `<meta>` tag element in the current HTML document.\n * @param tag The tag description with which to replace the existing tag content.\n * @param selector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n * replacement tag.\n * @return The modified element.\n */\n updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null {\n selector ??= parseSelector(tag);\n const meta = this.getTag(selector);\n if (meta) {\n setMetaElementAttributes(tag, meta);\n return meta;\n }\n return this._getOrCreateElement(tag, true);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param attrSelector A tag attribute and value to match against, to identify\n * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n */\n removeTag(attrSelector: string): void {\n this.removeTagElement(this.getTag(attrSelector)!);\n }\n\n /**\n * Removes an existing `<meta>` tag element from the current HTML document.\n * @param meta The tag definition to match against to identify an existing tag.\n */\n removeTagElement(meta: HTMLMetaElement): void {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n\n private _getOrCreateElement(\n meta: MetaDefinition,\n forceCreation: boolean = false,\n ): HTMLMetaElement {\n if (!forceCreation) {\n const selector: string = parseSelector(meta);\n // It's allowed to have multiple elements with the same name so it's not enough to\n // just check that element with the same name already present on the page. We also need to\n // check if element has tag attributes\n const elem = this.getTags(selector).filter((elem) => containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element: HTMLMetaElement = this._dom.createElement('meta') as HTMLMetaElement;\n setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n}\n\nfunction buildMetaSelector(attrSelector: string): string {\n return `meta[${attrSelector}]`;\n}\n\nfunction setMetaElementAttributes(tag: MetaDefinition, el: HTMLMetaElement) {\n Object.keys(tag).forEach((prop: string) => el.setAttribute(getMetaKeyMap(prop), tag[prop]));\n}\n\nfunction parseSelector(tag: MetaDefinition): string {\n const attr: string = tag.name ? 'name' : 'property';\n return `${attr}=${escapeSelectorValue(String(tag[attr]))}`;\n}\n\nfunction escapeSelectorValue(value: string): string {\n // Escape backslashes and double quotes to prevent CSS selector injection.\n // This securely confines the value inside an attribute selector.\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction containsAttributes(tag: MetaDefinition, elem: HTMLMetaElement): boolean {\n return Object.keys(tag).every((key) => elem.getAttribute(getMetaKeyMap(key)) === tag[key]);\n}\n\nfunction getMetaKeyMap(prop: string): string {\n return META_KEYS_MAP[prop] || prop;\n}\n\nfunction isMetaTag(tag: HTMLElement | null): tag is HTMLMetaElement {\n return tag?.nodeName.toLowerCase() === 'meta';\n}\n\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP: {[prop: string]: string} = {httpEquiv: 'http-equiv'};\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 {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Title {\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n /**\n * Get the title of the current HTML document.\n */\n getTitle(): string {\n return this._doc.title;\n }\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string) {\n this._doc.title = newTitle || '';\n }\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/// <reference path=\"../../../goog.d.ts\" />\n\nimport {ɵglobal as global} from '@angular/core';\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nexport function exportNgVar(name: string, value: any): void {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n const ng = (global['ng'] = (global['ng'] as {[key: string]: any} | undefined) || {});\n ng[name] = value;\n }\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 {ApplicationRef, ComponentRef} from '@angular/core';\n\nexport class ChangeDetectionPerfRecord {\n constructor(\n public msPerTick: number,\n public numTicks: number,\n ) {}\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n appRef: ApplicationRef;\n\n constructor(ref: ComponentRef<any>) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n\n // tslint:disable:no-console\n /**\n * Exercises change detection in a loop and then prints the average amount of\n * time in milliseconds how long a single round of change detection takes for\n * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n * of 500 milliseconds.\n *\n * Optionally, a user may pass a `config` parameter containing a map of\n * options. Supported options are:\n *\n * `record` (boolean) - causes the profiler to record a CPU profile while\n * it exercises the change detector. Example:\n *\n * ```ts\n * ng.profiler.timeChangeDetection({record: true})\n * ```\n */\n timeChangeDetection(config: any): ChangeDetectionPerfRecord {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n // Profiler is not available in Android browsers without dev tools opened\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\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 {ComponentRef} from '@angular/core';\n\nimport {exportNgVar} from '../../dom/util';\n\nimport {AngularProfiler} from './common_tools';\n\nconst PROFILER_GLOBAL_NAME = 'profiler';\n\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n * then hit Enter.\n *\n * @publicApi\n */\nexport function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T> {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nexport function disableDebugTools(): void {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\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 {ɵgetDOM as getDOM} from '@angular/common';\nimport {DebugElement, DebugNode, Predicate, Type} from '@angular/core';\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nexport class By {\n /**\n * Match all nodes.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\n static all(): Predicate<DebugNode> {\n return () => true;\n }\n\n /**\n * Match elements by the given CSS selector.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n */\n static css(selector: string): Predicate<DebugElement> {\n return (debugElement) => {\n return debugElement.nativeElement != null\n ? elementMatches(debugElement.nativeElement, selector)\n : false;\n };\n }\n\n /**\n * Match nodes that have the given directive present.\n *\n * @usageNotes\n * ### Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n */\n static directive(type: Type<any>): Predicate<DebugNode> {\n return (debugNode) => debugNode.providerTokens!.indexOf(type) !== -1;\n }\n}\n\nfunction elementMatches(n: any, selector: string): boolean {\n if (getDOM().isElementNode(n)) {\n return (\n (n.matches && n.matches(selector)) ||\n (n.msMatchesSelector && n.msMatchesSelector(selector)) ||\n (n.webkitMatchesSelector && n.webkitMatchesSelector(selector))\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\nimport {HttpTransferCacheOptions, ɵwithHttpTransferCache} from '@angular/common/http';\nimport {\n APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n ɵCACHE_ACTIVE as CACHE_ACTIVE,\n ɵConsole as Console,\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n ɵformatRuntimeError as formatRuntimeError,\n inject,\n ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n makeEnvironmentProviders,\n Provider,\n provideStabilityDebugging,\n ɵRuntimeError as RuntimeError,\n ɵwithDomHydration as withDomHydration,\n ɵwithEventReplay,\n ɵwithI18nSupport,\n ɵwithIncrementalHydration,\n} from '@angular/core';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nexport enum HydrationFeatureKind {\n NoHttpTransferCache,\n HttpTransferCacheOptions,\n I18nSupport,\n EventReplay,\n IncrementalHydration,\n NoIncrementalHydration,\n}\n\n/**\n * Helper type to represent a Hydration feature.\n *\n * @publicApi\n */\nexport interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature<FeatureKind extends HydrationFeatureKind>(\n ɵkind: FeatureKind,\n ɵproviders: Provider[] = [],\n ɵoptions: unknown = {},\n): HydrationFeature<FeatureKind> {\n return {ɵkind, ɵproviders};\n}\n\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @see [Disabling Caching](guide/ssr#disabling-caching)\n *\n * @publicApi\n */\nexport function withNoHttpTransferCache(): HydrationFeature<HydrationFeatureKind.NoHttpTransferCache> {\n // This feature has no providers and acts as a flag that turns off\n // HTTP transfer cache (which otherwise is turned on by default).\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @see [Configuring HTTP transfer cache options](guide/ssr#caching-data-when-using-httpclient)\n *\n * @publicApi\n */\nexport function withHttpTransferCacheOptions(\n options: HttpTransferCacheOptions,\n): HydrationFeature<HydrationFeatureKind.HttpTransferCacheOptions> {\n // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n return hydrationFeature(\n HydrationFeatureKind.HttpTransferCacheOptions,\n ɵwithHttpTransferCache(options),\n );\n}\n\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @publicApi 20.0\n */\nexport function withI18nSupport(): HydrationFeature<HydrationFeatureKind.I18nSupport> {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nexport function withEventReplay(): HydrationFeature<HydrationFeatureKind.EventReplay> {\n return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @publicApi 20.0\n * @see {@link provideClientHydration}\n *\n * @deprecated Since v22.0.0, incremental hydration is enabled by default with `provideClientHydration`.\n * Intent to remove in v24.\n */\nexport function withIncrementalHydration(): HydrationFeature<HydrationFeatureKind.IncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n\n/**\n * Disables support for incremental hydration (which is enabled by default).\n *\n * @publicApi 22.0\n * @see {@link provideClientHydration}\n */\nexport function withNoIncrementalHydration(): HydrationFeature<HydrationFeatureKind.NoIncrementalHydration> {\n return hydrationFeature(HydrationFeatureKind.NoIncrementalHydration);\n}\n\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether enabledBlocking initial navigation is used in an application\n * and logs a warning in a console if it's not compatible with hydration.\n */\nfunction provideEnabledBlockingInitialNavigationDetector(): Provider[] {\n return [\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true,\n });\n\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(Console);\n const message = formatRuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both hydration and enabledBlocking initial navigation ' +\n 'in the same application, which is a contradiction.',\n );\n console.warn(message);\n }\n },\n multi: true,\n },\n ];\n}\n\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n * Incremental hydration. [Learn more](guide/incremental-hydration).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n * * {@link withNoIncrementalHydration} to disable incremental hydration\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n * declarations: [RootCmp],\n * bootstrap: [RootCmp],\n * providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n * @see {@link withNoIncrementalHydration}\n *\n * @param features Optional features to configure additional hydration behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi 17.0\n */\nexport function provideClientHydration(\n ...features: HydrationFeature<HydrationFeatureKind>[]\n): EnvironmentProviders {\n const providers: Provider[] = [];\n const featuresKind = new Set<HydrationFeatureKind>();\n\n for (const {ɵproviders, ɵkind} of features) {\n featuresKind.add(ɵkind);\n\n if (ɵproviders.length) {\n providers.push(ɵproviders);\n }\n }\n\n const hasHttpTransferCacheOptions = featuresKind.has(\n HydrationFeatureKind.HttpTransferCacheOptions,\n );\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n if (featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n if (\n featuresKind.has(HydrationFeatureKind.IncrementalHydration) &&\n featuresKind.has(HydrationFeatureKind.NoIncrementalHydration)\n ) {\n throw new RuntimeError(\n RuntimeErrorCode.HYDRATION_CONFLICTING_FEATURES,\n 'Configuration error: found both withIncrementalHydration() and withNoIncrementalHydration() in the same call to provideClientHydration(), which is a contradiction.',\n );\n }\n }\n\n return makeEnvironmentProviders([\n typeof ngDevMode !== 'undefined' && ngDevMode\n ? provideEnabledBlockingInitialNavigationDetector()\n : [],\n typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [],\n withDomHydration(),\n featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions\n ? []\n : ɵwithHttpTransferCache({}),\n featuresKind.has(HydrationFeatureKind.NoIncrementalHydration)\n ? []\n : ɵwithIncrementalHydration(),\n providers,\n {\n provide: CACHE_ACTIVE,\n useValue: {isActive: true},\n },\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const cacheState = inject(CACHE_ACTIVE);\n\n return () => {\n appRef.whenStable().then(() => {\n cacheState.isActive = false;\n });\n };\n },\n },\n ]);\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 {DOCUMENT} from '@angular/common';\nimport {\n ɵ_sanitizeHtml as _sanitizeHtml,\n ɵ_sanitizeUrl as _sanitizeUrl,\n ɵallowSanitizationBypassAndThrow as allowSanitizationBypassOrThrow,\n ɵbypassSanitizationTrustHtml as bypassSanitizationTrustHtml,\n ɵbypassSanitizationTrustResourceUrl as bypassSanitizationTrustResourceUrl,\n ɵbypassSanitizationTrustScript as bypassSanitizationTrustScript,\n ɵbypassSanitizationTrustStyle as bypassSanitizationTrustStyle,\n ɵbypassSanitizationTrustUrl as bypassSanitizationTrustUrl,\n ɵBypassType as BypassType,\n forwardRef,\n inject,\n Injectable,\n ɵRuntimeError as RuntimeError,\n Sanitizer,\n SecurityContext,\n Service,\n ɵunwrapSafeValue as unwrapSafeValue,\n ɵXSS_SECURITY_URL as XSS_SECURITY_URL,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from '../errors';\n\nexport {SecurityContext};\n\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * @publicApi\n */\nexport interface SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * @publicApi\n */\nexport interface SafeHtml extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * @publicApi\n */\nexport interface SafeStyle extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * @publicApi\n */\nexport interface SafeScript extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * @publicApi\n */\nexport interface SafeUrl extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * @publicApi\n */\nexport interface SafeResourceUrl extends SafeValue {}\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: forwardRef(() => DomSanitizerImpl)})\nexport abstract class DomSanitizer implements Sanitizer {\n /**\n * Gets a safe value from either a known safe value or a value with unknown safety.\n *\n * If the given value is already a `SafeValue`, this method returns the unwrapped value.\n * If the security context is HTML and the given value is a plain string, this method\n * sanitizes the string, removing any potentially unsafe content.\n * For any other security context, this method throws an error if provided\n * with a plain string.\n */\n abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;\n\n /**\n * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\n * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\n * leave safe HTML intact, so in most situations this method should not be used.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustHtml(value: string): SafeHtml;\n\n /**\n * Bypass security and trust the given value to be safe style value (CSS).\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustStyle(value: string): SafeStyle;\n\n /**\n * Bypass security and trust the given value to be safe JavaScript.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustScript(value: string): SafeScript;\n\n /**\n * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\n * in hyperlinks or `<img src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustUrl(value: string): SafeUrl;\n\n /**\n * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\n * be used to load executable code from, like `<script src>`, or `<iframe src>`.\n *\n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n */\n abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;\n}\n\n@Service()\nexport class DomSanitizerImpl extends DomSanitizer {\n private _doc = inject(DOCUMENT);\n override sanitize(ctx: SecurityContext, value: SafeValue | string | null): string | null {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value as string;\n case SecurityContext.HTML:\n if (allowSanitizationBypassOrThrow(value, BypassType.Html)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (allowSanitizationBypassOrThrow(value, BypassType.Style)) {\n return unwrapSafeValue(value);\n }\n return value as string;\n case SecurityContext.SCRIPT:\n if (allowSanitizationBypassOrThrow(value, BypassType.Script)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'unsafe value used in a script context',\n );\n case SecurityContext.URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.Url)) {\n return unwrapSafeValue(value);\n }\n return _sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (allowSanitizationBypassOrThrow(value, BypassType.ResourceUrl)) {\n return unwrapSafeValue(value);\n }\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`,\n );\n default:\n throw new RuntimeError(\n RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`,\n );\n }\n }\n\n override bypassSecurityTrustHtml(value: string): SafeHtml {\n return bypassSanitizationTrustHtml(value);\n }\n override bypassSecurityTrustStyle(value: string): SafeStyle {\n return bypassSanitizationTrustStyle(value);\n }\n override bypassSecurityTrustScript(value: string): SafeScript {\n return bypassSanitizationTrustScript(value);\n }\n override bypassSecurityTrustUrl(value: string): SafeUrl {\n return bypassSanitizationTrustUrl(value);\n }\n override bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl {\n return bypassSanitizationTrustResourceUrl(value);\n }\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-browser package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.7');\n"],"names":["Meta","_doc","inject","DOCUMENT","_dom","getDOM","_cachedHead","addTag","tag","forceCreation","_getOrCreateElement","addTags","tags","filter","map","getTag","attrSelector","meta","querySelector","buildMetaSelector","isMetaTag","getTags","list","querySelectorAll","Array","from","elem","updateTag","selector","parseSelector","setMetaElementAttributes","removeTag","removeTagElement","remove","containsAttributes","undefined","element","createElement","head","getElementsByTagName","appendChild","deps","target","i0","ɵɵFactoryTarget","Service","decorators","el","Object","keys","forEach","prop","setAttribute","getMetaKeyMap","attr","name","escapeSelectorValue","String","value","replace","every","key","getAttribute","META_KEYS_MAP","nodeName","toLowerCase","httpEquiv","Title","constructor","getTitle","title","setTitle","newTitle","ɵfac","ɵɵngDeclareFactory","minVersion","version","ngImport","type","Injectable","ɵprov","ɵɵngDeclareInjectable","providedIn","Inject","exportNgVar","COMPILED","ng","global","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","appRef","ref","injector","get","ApplicationRef","timeChangeDetection","config","record","profileName","console","profile","start","performance","now","tick","end","profileEnd","log","toFixed","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","By","all","css","debugElement","nativeElement","elementMatches","directive","debugNode","providerTokens","indexOf","n","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","HydrationFeatureKind","hydrationFeature","ɵkind","ɵproviders","ɵoptions","withNoHttpTransferCache","NoHttpTransferCache","withHttpTransferCacheOptions","options","HttpTransferCacheOptions","ɵwithHttpTransferCache","withI18nSupport","I18nSupport","ɵwithI18nSupport","withEventReplay","EventReplay","ɵwithEventReplay","withIncrementalHydration","IncrementalHydration","ɵwithIncrementalHydration","withNoIncrementalHydration","NoIncrementalHydration","provideEnabledBlockingInitialNavigationDetector","provide","ENVIRONMENT_INITIALIZER","useValue","isEnabledBlockingInitialNavigation","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","optional","Console","message","formatRuntimeError","warn","multi","provideClientHydration","features","providers","featuresKind","Set","add","length","push","hasHttpTransferCacheOptions","has","ngDevMode","RuntimeError","makeEnvironmentProviders","provideStabilityDebugging","withDomHydration","CACHE_ACTIVE","isActive","APP_BOOTSTRAP_LISTENER","useFactory","cacheState","whenStable","then","DomSanitizer","useExisting","forwardRef","DomSanitizerImpl","args","sanitize","ctx","SecurityContext","NONE","HTML","allowSanitizationBypassOrThrow","unwrapSafeValue","_sanitizeHtml","toString","STYLE","SCRIPT","URL","_sanitizeUrl","RESOURCE_URL","XSS_SECURITY_URL","bypassSecurityTrustHtml","bypassSanitizationTrustHtml","bypassSecurityTrustStyle","bypassSanitizationTrustStyle","bypassSecurityTrustScript","bypassSanitizationTrustScript","bypassSecurityTrustUrl","bypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","bypassSanitizationTrustResourceUrl","VERSION","Version"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.5
2
+ * @license Angular v22.0.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -37,7 +37,7 @@ class DOMTestComponentRenderer extends TestComponentRenderer {
37
37
  }
38
38
  static ɵfac = i0.ɵɵngDeclareFactory({
39
39
  minVersion: "12.0.0",
40
- version: "22.0.5",
40
+ version: "22.0.7",
41
41
  ngImport: i0,
42
42
  type: DOMTestComponentRenderer,
43
43
  deps: [{
@@ -47,14 +47,14 @@ class DOMTestComponentRenderer extends TestComponentRenderer {
47
47
  });
48
48
  static ɵprov = i0.ɵɵngDeclareInjectable({
49
49
  minVersion: "12.0.0",
50
- version: "22.0.5",
50
+ version: "22.0.7",
51
51
  ngImport: i0,
52
52
  type: DOMTestComponentRenderer
53
53
  });
54
54
  }
55
55
  i0.ɵɵngDeclareClassMetadata({
56
56
  minVersion: "12.0.0",
57
- version: "22.0.5",
57
+ version: "22.0.7",
58
58
  ngImport: i0,
59
59
  type: DOMTestComponentRenderer,
60
60
  decorators: [{
@@ -73,7 +73,7 @@ const platformBrowserTesting = createPlatformFactory(platformBrowser, 'browserTe
73
73
  class BrowserTestingModule {
74
74
  static ɵfac = i0.ɵɵngDeclareFactory({
75
75
  minVersion: "12.0.0",
76
- version: "22.0.5",
76
+ version: "22.0.7",
77
77
  ngImport: i0,
78
78
  type: BrowserTestingModule,
79
79
  deps: [],
@@ -81,14 +81,14 @@ class BrowserTestingModule {
81
81
  });
82
82
  static ɵmod = i0.ɵɵngDeclareNgModule({
83
83
  minVersion: "14.0.0",
84
- version: "22.0.5",
84
+ version: "22.0.7",
85
85
  ngImport: i0,
86
86
  type: BrowserTestingModule,
87
87
  exports: [BrowserModule]
88
88
  });
89
89
  static ɵinj = i0.ɵɵngDeclareInjector({
90
90
  minVersion: "12.0.0",
91
- version: "22.0.5",
91
+ version: "22.0.7",
92
92
  ngImport: i0,
93
93
  type: BrowserTestingModule,
94
94
  providers: [{
@@ -103,7 +103,7 @@ class BrowserTestingModule {
103
103
  }
104
104
  i0.ɵɵngDeclareClassMetadata({
105
105
  minVersion: "12.0.0",
106
- version: "22.0.5",
106
+ version: "22.0.7",
107
107
  ngImport: i0,
108
108
  type: BrowserTestingModule,
109
109
  decorators: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/platform-browser",
3
- "version": "22.0.5",
3
+ "version": "22.0.7",
4
4
  "description": "Angular - library for using Angular in a web browser",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -11,9 +11,9 @@
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "@angular/animations": "22.0.5",
15
- "@angular/core": "22.0.5",
16
- "@angular/common": "22.0.5"
14
+ "@angular/animations": "22.0.7",
15
+ "@angular/core": "22.0.7",
16
+ "@angular/common": "22.0.7"
17
17
  },
18
18
  "peerDependenciesMeta": {
19
19
  "@angular/animations": {