@angular/platform-server 21.2.15 → 21.2.17

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,12 +1,12 @@
1
1
  /**
2
- * @license Angular v21.2.15
2
+ * @license Angular v21.2.17
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import { ɵsetRootDomAdapter as _setRootDomAdapter, DOCUMENT, XhrFactory, PlatformLocation, ɵgetDOM as _getDOM, ɵPLATFORM_SERVER_ID as _PLATFORM_SERVER_ID, ɵNullViewportScroller as _NullViewportScroller, ViewportScroller } from '@angular/common';
8
8
  import * as i0 from '@angular/core';
9
- import { InjectionToken, inject, Injector, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, Inject, Injectable, APP_ID, TransferState, PLATFORM_ID, PLATFORM_INITIALIZER, Testability, ɵTESTABILITY as _TESTABILITY, createPlatformFactory, platformCore, ɵsetDocument as _setDocument, NgModule } from '@angular/core';
9
+ import { ɵRuntimeError as _RuntimeError, InjectionToken, inject, Injector, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, Inject, Injectable, APP_ID, TransferState, PLATFORM_ID, PLATFORM_INITIALIZER, Testability, ɵTESTABILITY as _TESTABILITY, createPlatformFactory, platformCore, ɵsetDocument as _setDocument, NgModule } from '@angular/core';
10
10
  import { ɵBrowserDomAdapter as _BrowserDomAdapter, EventManagerPlugin, EVENT_MANAGER_PLUGINS, BrowserModule } from '@angular/platform-browser';
11
11
  import domino from '../third_party/domino/bundled-domino.mjs';
12
12
  import { ɵHTTP_ROOT_INTERCEPTOR_FNS as _HTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';
@@ -80,7 +80,7 @@ class DominoAdapter extends _BrowserDomAdapter {
80
80
  return 'Fake user agent';
81
81
  }
82
82
  getCookie(name) {
83
- throw new Error('getCookie has not been implemented');
83
+ throw new _RuntimeError(5700, (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented');
84
84
  }
85
85
  }
86
86
 
@@ -96,7 +96,7 @@ class PlatformState {
96
96
  }
97
97
  renderToString() {
98
98
  if (ngDevMode && !this._enableDomEmulation && !window?.document) {
99
- throw new Error('Disabled DOM emulation should only run in browser environments');
99
+ throw new _RuntimeError(5704, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Disabled DOM emulation should only run in browser environments');
100
100
  }
101
101
  const measuringLabel = 'renderToString';
102
102
  _startMeasuring(measuringLabel);
@@ -109,7 +109,7 @@ class PlatformState {
109
109
  }
110
110
  static ɵfac = i0.ɵɵngDeclareFactory({
111
111
  minVersion: "12.0.0",
112
- version: "21.2.15",
112
+ version: "21.2.17",
113
113
  ngImport: i0,
114
114
  type: PlatformState,
115
115
  deps: [{
@@ -119,14 +119,14 @@ class PlatformState {
119
119
  });
120
120
  static ɵprov = i0.ɵɵngDeclareInjectable({
121
121
  minVersion: "12.0.0",
122
- version: "21.2.15",
122
+ version: "21.2.17",
123
123
  ngImport: i0,
124
124
  type: PlatformState
125
125
  });
126
126
  }
127
127
  i0.ɵɵngDeclareClassMetadata({
128
128
  minVersion: "12.0.0",
129
- version: "21.2.15",
129
+ version: "21.2.17",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -144,10 +144,65 @@ function enableDomEmulation(injector) {
144
144
  return injector.get(ENABLE_DOM_EMULATION, true);
145
145
  }
146
146
 
147
+ const HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;
148
+ function resolveUrl(urlStr, origin, options = {}) {
149
+ const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;
150
+ if (!urlStr) {
151
+ return originUrl || null;
152
+ }
153
+ urlStr = urlStr.trim();
154
+ let resolved;
155
+ try {
156
+ resolved = new URL(urlStr);
157
+ } catch {}
158
+ const {
159
+ allowProtocolRelative = false,
160
+ allowOriginChange = true
161
+ } = options;
162
+ if (resolved) {
163
+ if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {
164
+ throwSuspiciousUrlError(urlStr);
165
+ }
166
+ return resolved;
167
+ }
168
+ if (!URL.canParse(urlStr, 'http://fake')) {
169
+ throw new _RuntimeError(5701, typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr);
170
+ }
171
+ if (!originUrl) {
172
+ return null;
173
+ }
174
+ if (urlStr.startsWith('//')) {
175
+ if (!allowProtocolRelative) {
176
+ throw new _RuntimeError(5702, typeof ngDevMode === 'undefined' || ngDevMode ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}` : urlStr);
177
+ }
178
+ return new URL(urlStr, origin);
179
+ }
180
+ resolved = new URL(urlStr, origin);
181
+ if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {
182
+ throwSuspiciousUrlError(urlStr);
183
+ }
184
+ return resolved;
185
+ }
186
+ function throwSuspiciousUrlError(urlStr) {
187
+ throw new _RuntimeError(5703, typeof ngDevMode === 'undefined' || ngDevMode ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.` : urlStr);
188
+ }
189
+ function isSafeOriginChange(resolved, origin, urlStr, allowOriginChange) {
190
+ if (origin.origin === resolved.origin) {
191
+ return true;
192
+ }
193
+ if (!allowOriginChange) {
194
+ return false;
195
+ }
196
+ return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);
197
+ }
198
+
147
199
  class ServerXhr {
148
200
  xhrImpl;
149
201
  async ɵloadImpl() {
150
202
  if (!this.xhrImpl) {
203
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
204
+ console.warn('XHR support in `@angular/platform-server` is deprecated and will be removed ' + 'in a future version of Angular. It has known security and performance issues in server ' + 'environments, such as forwarding `Authorization` headers on cross-origin ' + 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' + 'Please enable the HttpClient fetch backend instead by using `withFetch()`.');
205
+ }
151
206
  const {
152
207
  default: xhr
153
208
  } = await import('xhr2');
@@ -157,13 +212,13 @@ class ServerXhr {
157
212
  build() {
158
213
  const impl = this.xhrImpl;
159
214
  if (!impl) {
160
- throw new Error('Unexpected state in ServerXhr: XHR implementation is not loaded.');
215
+ throw new _RuntimeError(5705, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Unexpected state in ServerXhr: XHR implementation is not loaded.');
161
216
  }
162
217
  return new impl.XMLHttpRequest();
163
218
  }
164
219
  static ɵfac = i0.ɵɵngDeclareFactory({
165
220
  minVersion: "12.0.0",
166
- version: "21.2.15",
221
+ version: "21.2.17",
167
222
  ngImport: i0,
168
223
  type: ServerXhr,
169
224
  deps: [],
@@ -171,14 +226,14 @@ class ServerXhr {
171
226
  });
172
227
  static ɵprov = i0.ɵɵngDeclareInjectable({
173
228
  minVersion: "12.0.0",
174
- version: "21.2.15",
229
+ version: "21.2.17",
175
230
  ngImport: i0,
176
231
  type: ServerXhr
177
232
  });
178
233
  }
179
234
  i0.ɵɵngDeclareClassMetadata({
180
235
  minVersion: "12.0.0",
181
- version: "21.2.15",
236
+ version: "21.2.17",
182
237
  ngImport: i0,
183
238
  type: ServerXhr,
184
239
  decorators: [{
@@ -207,13 +262,9 @@ function relativeUrlsTransformerInterceptorFn(request, next) {
207
262
  }
208
263
  const baseHref = platformLocation.getBaseHrefFromDOM() || href;
209
264
  const baseUrl = new URL(baseHref, urlPrefix);
210
- let parsedUrl = new URL(request.url, baseUrl);
211
- if (parsedUrl.origin !== baseUrl.origin) {
212
- const isProtocolRelative = /^\/\/[^/\\]/.test(trimmedUrl);
213
- if (!isProtocolRelative) {
214
- parsedUrl = new URL(trimmedUrl.replace(/^[/\\]+/, '/'), baseUrl);
215
- }
216
- }
265
+ const parsedUrl = resolveUrl(request.url, baseUrl, {
266
+ allowProtocolRelative: true
267
+ });
217
268
  return next(request.clone({
218
269
  url: parsedUrl.toString()
219
270
  }));
@@ -227,27 +278,6 @@ const SERVER_HTTP_PROVIDERS = [{
227
278
  multi: true
228
279
  }];
229
280
 
230
- const LEADING_SLASHES_REGEX = /^[/\\]+/;
231
- function parseUrl(urlStr, origin) {
232
- if (!urlStr) {
233
- return origin !== undefined ? new URL('/', origin) : null;
234
- }
235
- if (URL.canParse(urlStr)) {
236
- return new URL(urlStr);
237
- }
238
- if (/^[a-zA-Z][a-zA-Z0-9+.-]*:(\/\/|\\\\)/.test(urlStr)) {
239
- throw new Error(`Invalid URL: ${urlStr}`);
240
- }
241
- if (origin === undefined) {
242
- return null;
243
- }
244
- let normalizedPath = urlStr.replace(LEADING_SLASHES_REGEX, '/');
245
- if (normalizedPath[0] !== '/') {
246
- normalizedPath = `/${normalizedPath}`;
247
- }
248
- return new URL(normalizedPath, origin);
249
- }
250
-
251
281
  class ServerPlatformLocation {
252
282
  href = '/';
253
283
  hostname = '/';
@@ -258,6 +288,7 @@ class ServerPlatformLocation {
258
288
  hash = '';
259
289
  _hashUpdate = new Subject();
260
290
  _doc = inject(DOCUMENT);
291
+ origin = this._doc.location.origin;
261
292
  constructor() {
262
293
  const config = inject(INITIAL_CONFIG, {
263
294
  optional: true
@@ -273,8 +304,9 @@ class ServerPlatformLocation {
273
304
  pathname,
274
305
  search,
275
306
  hash,
276
- href
277
- } = parseUrl(config.url, this._doc.location.origin);
307
+ href,
308
+ origin
309
+ } = resolveUrl(config.url, this.origin);
278
310
  this.protocol = protocol;
279
311
  this.hostname = hostname;
280
312
  this.port = port;
@@ -282,6 +314,7 @@ class ServerPlatformLocation {
282
314
  this.search = search;
283
315
  this.hash = hash;
284
316
  this.href = href;
317
+ this.origin = origin;
285
318
  }
286
319
  }
287
320
  getBaseHrefFromDOM() {
@@ -318,7 +351,9 @@ class ServerPlatformLocation {
318
351
  hash,
319
352
  href,
320
353
  protocol
321
- } = parseUrl(newUrl, this._doc.location.origin);
354
+ } = resolveUrl(newUrl, this.origin, {
355
+ allowOriginChange: false
356
+ });
322
357
  const writableThis = this;
323
358
  writableThis.pathname = pathname;
324
359
  writableThis.search = search;
@@ -340,7 +375,7 @@ class ServerPlatformLocation {
340
375
  }
341
376
  static ɵfac = i0.ɵɵngDeclareFactory({
342
377
  minVersion: "12.0.0",
343
- version: "21.2.15",
378
+ version: "21.2.17",
344
379
  ngImport: i0,
345
380
  type: ServerPlatformLocation,
346
381
  deps: [],
@@ -348,14 +383,14 @@ class ServerPlatformLocation {
348
383
  });
349
384
  static ɵprov = i0.ɵɵngDeclareInjectable({
350
385
  minVersion: "12.0.0",
351
- version: "21.2.15",
386
+ version: "21.2.17",
352
387
  ngImport: i0,
353
388
  type: ServerPlatformLocation
354
389
  });
355
390
  }
356
391
  i0.ɵɵngDeclareClassMetadata({
357
392
  minVersion: "12.0.0",
358
- version: "21.2.15",
393
+ version: "21.2.17",
359
394
  ngImport: i0,
360
395
  type: ServerPlatformLocation,
361
396
  decorators: [{
@@ -378,7 +413,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
378
413
  }
379
414
  static ɵfac = i0.ɵɵngDeclareFactory({
380
415
  minVersion: "12.0.0",
381
- version: "21.2.15",
416
+ version: "21.2.17",
382
417
  ngImport: i0,
383
418
  type: ServerEventManagerPlugin,
384
419
  deps: [{
@@ -388,14 +423,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
388
423
  });
389
424
  static ɵprov = i0.ɵɵngDeclareInjectable({
390
425
  minVersion: "12.0.0",
391
- version: "21.2.15",
426
+ version: "21.2.17",
392
427
  ngImport: i0,
393
428
  type: ServerEventManagerPlugin
394
429
  });
395
430
  }
396
431
  i0.ɵɵngDeclareClassMetadata({
397
432
  minVersion: "12.0.0",
398
- version: "21.2.15",
433
+ version: "21.2.17",
399
434
  ngImport: i0,
400
435
  type: ServerEventManagerPlugin,
401
436
  decorators: [{
@@ -505,7 +540,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
505
540
  class ServerModule {
506
541
  static ɵfac = i0.ɵɵngDeclareFactory({
507
542
  minVersion: "12.0.0",
508
- version: "21.2.15",
543
+ version: "21.2.17",
509
544
  ngImport: i0,
510
545
  type: ServerModule,
511
546
  deps: [],
@@ -513,14 +548,14 @@ class ServerModule {
513
548
  });
514
549
  static ɵmod = i0.ɵɵngDeclareNgModule({
515
550
  minVersion: "14.0.0",
516
- version: "21.2.15",
551
+ version: "21.2.17",
517
552
  ngImport: i0,
518
553
  type: ServerModule,
519
554
  exports: [BrowserModule]
520
555
  });
521
556
  static ɵinj = i0.ɵɵngDeclareInjector({
522
557
  minVersion: "12.0.0",
523
- version: "21.2.15",
558
+ version: "21.2.17",
524
559
  ngImport: i0,
525
560
  type: ServerModule,
526
561
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -529,7 +564,7 @@ class ServerModule {
529
564
  }
530
565
  i0.ɵɵngDeclareClassMetadata({
531
566
  minVersion: "12.0.0",
532
- version: "21.2.15",
567
+ version: "21.2.17",
533
568
  ngImport: i0,
534
569
  type: ServerModule,
535
570
  decorators: [{
@@ -546,7 +581,7 @@ function _document() {
546
581
  const _enableDomEmulation = enableDomEmulation(injector);
547
582
  let document;
548
583
  if (config && config.document) {
549
- document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url !== undefined ? parseUrl(config.url, 'http://localhost').href : undefined) : window.document : config.document;
584
+ document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url !== undefined ? resolveUrl(config.url, 'http://localhost').href : undefined) : window.document : config.document;
550
585
  } else {
551
586
  document = _getDOM().createHtmlDocument();
552
587
  }
@@ -567,5 +602,5 @@ function platformServer(extraProviders) {
567
602
  return platform;
568
603
  }
569
604
 
570
- export { BEFORE_APP_SERIALIZED, DominoAdapter, ENABLE_DOM_EMULATION, INITIAL_CONFIG, INTERNAL_SERVER_PLATFORM_PROVIDERS, PLATFORM_SERVER_PROVIDERS, PlatformState, SERVER_RENDER_PROVIDERS, ServerModule, createScript, parseUrl, platformServer };
605
+ export { BEFORE_APP_SERIALIZED, DominoAdapter, ENABLE_DOM_EMULATION, INITIAL_CONFIG, INTERNAL_SERVER_PLATFORM_PROVIDERS, PLATFORM_SERVER_PROVIDERS, PlatformState, SERVER_RENDER_PROVIDERS, ServerModule, createScript, platformServer, resolveUrl };
571
606
  //# sourceMappingURL=_server-chunk.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs';\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new Error('getCookie has not been implemented');\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 {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\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 inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new Error('Disabled DOM emulation should only run in browser environments');\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\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 {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider} from '@angular/core';\nimport {Observable} from 'rxjs';\n\n@Injectable()\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new Error('Unexpected state in ServerXhr: XHR implementation is not loaded.');\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n // URLs with a schema should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n let parsedUrl = new URL(request.url, baseUrl);\n\n if (parsedUrl.origin !== baseUrl.origin) {\n // If the request changed the origin, we check if it was authorized to do so.\n // Legitimate absolute URLs start with a scheme (e.g. http://) or are protocol-relative (//).\n // SSRF bypasses via backslashes (e.g. `/\\attacker.com`, `\\\\attacker.com`) evade naive checks.\n const isProtocolRelative = /^\\/\\/[^/\\\\]/.test(trimmedUrl);\n if (!isProtocolRelative) {\n // Unrecognized structure that changed origin. Force it to be a local path.\n parsedUrl = new URL(trimmedUrl.replace(/^[/\\\\]+/, '/'), baseUrl);\n }\n }\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\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\nconst LEADING_SLASHES_REGEX = /^[/\\\\]+/;\n\n/**\n * Parses a URL string and returns a resolved WHATWG URL object.\n * If no origin is provided, it parses and returns the URL only if it is a valid absolute URL;\n * otherwise it returns `null` (or throws if the URL is a malformed absolute URL).\n * If an origin is provided, relative URLs and protocol-relative URLs are normalized and resolved against it.\n */\nexport function parseUrl(urlStr: string | undefined): URL | null;\nexport function parseUrl(urlStr: string | undefined, origin: string): URL;\nexport function parseUrl(urlStr: string | undefined, origin?: string): URL | null {\n if (!urlStr) {\n return origin !== undefined ? new URL('/', origin) : null;\n }\n\n if (URL.canParse(urlStr)) {\n return new URL(urlStr);\n }\n\n if (/^[a-zA-Z][a-zA-Z0-9+.-]*:(\\/\\/|\\\\\\\\)/.test(urlStr)) {\n throw new Error(`Invalid URL: ${urlStr}`);\n }\n\n if (origin === undefined) {\n return null;\n }\n\n let normalizedPath = urlStr.replace(LEADING_SLASHES_REGEX, '/');\n if (normalizedPath[0] !== '/') {\n normalizedPath = `/${normalizedPath}`;\n }\n\n return new URL(normalizedPath, origin);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {parseUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private _doc = inject(DOCUMENT);\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href} = parseUrl(\n config.url,\n this._doc.location.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = parseUrl(newUrl, this._doc.location.origin);\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\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, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\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 APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\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 {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {parseUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined ? parseUrl(config.url, 'http://localhost').href : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["setDomTypes","Object","assign","globalThis","domino","impl","Event","parseDocument","html","url","window","createWindow","doc","document","serializeDocument","serialize","DominoAdapter","BrowserDomAdapter","makeCurrent","setRootDomAdapter","supportsDOMEvents","defaultDoc","createHtmlDocument","getDefaultDocument","createDocument","isElementNode","node","nodeType","ELEMENT_NODE","isShadowRoot","shadowRoot","getGlobalEventTarget","target","defaultView","body","getBaseHref","length","head","children","i","child","tagName","getAttribute","dispatchEvent","el","evt","ownerDocument","win","getUserAgent","getCookie","name","Error","INITIAL_CONFIG","InjectionToken","BEFORE_APP_SERIALIZED","ENABLE_DOM_EMULATION","PlatformState","_doc","_enableDomEmulation","enableDomEmulation","inject","Injector","constructor","renderToString","ngDevMode","measuringLabel","startMeasuring","rendered","documentElement","outerHTML","stopMeasuring","getDocument","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","DOCUMENT","ɵɵFactoryTarget","Injectable","decorators","Inject","injector","get","ServerXhr","xhrImpl","ɵloadImpl","default","xhr","build","XMLHttpRequest","deps","URL_SCHEMA_REGEXP","relativeUrlsTransformerInterceptorFn","request","next","trimmedUrl","trim","test","platformLocation","PlatformLocation","href","protocol","hostname","port","startsWith","urlPrefix","baseHref","getBaseHrefFromDOM","baseUrl","URL","parsedUrl","origin","isProtocolRelative","replace","clone","toString","SERVER_HTTP_PROVIDERS","provide","XhrFactory","useClass","HTTP_ROOT_INTERCEPTOR_FNS","useValue","multi","LEADING_SLASHES_REGEX","parseUrl","urlStr","undefined","canParse","normalizedPath","ServerPlatformLocation","pathname","search","hash","_hashUpdate","Subject","config","optional","location","getDOM","onPopState","fn","onHashChange","subscription","subscribe","unsubscribe","setHash","value","oldUrl","newUrl","queueMicrotask","state","replaceState","title","writableThis","pushState","forward","back","getState","ServerEventManagerPlugin","EventManagerPlugin","supports","eventName","addEventListener","element","handler","options","onAndCancel","TRANSFER_STATE_STATUS","factory","serialized","TRANSFER_STATE_SERIALIZATION_PROVIDERS","useFactory","serializeTransferStateFactory","createScript","textContent","nonce","script","createElement","setAttribute","warnIfStateTransferHappened","transferStateStatus","console","warn","appId","APP_ID","transferStore","TransferState","content","toJson","isEmpty","id","appendChild","INTERNAL_SERVER_PLATFORM_PROVIDERS","_document","PLATFORM_ID","PLATFORM_SERVER_ID","PLATFORM_INITIALIZER","initDominoAdapter","SERVER_RENDER_PROVIDERS","EVENT_MANAGER_PLUGINS","PLATFORM_SERVER_PROVIDERS","Testability","TESTABILITY","ViewportScroller","NullViewportScroller","ServerModule","NgModule","ɵmod","ɵɵngDeclareNgModule","BrowserModule","providers","imports","args","exports","ɵsetDocument","platformServer","extraProviders","noServerModeSet","ngServerMode","platform","createPlatformFactory","platformCore","onDestroy"],"mappings":";;;;;;;;;;;;;;SAagBA,WAAWA,GAAA;EAGzBC,MAAM,CAACC,MAAM,CAACC,UAAU,EAAEC,MAAM,CAACC,IAAI,CAAC;EACrCF,UAAkB,CAAC,eAAe,CAAC,GAAGC,MAAM,CAACC,IAAI,CAACC,KAAK;AAC1D;SAKgBC,aAAaA,CAACC,IAAY,EAAEC,GAAG,GAAG,GAAG,EAAA;EACnD,IAAIC,MAAM,GAAGN,MAAM,CAACO,YAAY,CAACH,IAAI,EAAEC,GAAG,CAAC;AAC3C,EAAA,IAAIG,GAAG,GAAGF,MAAM,CAACG,QAAQ;AACzB,EAAA,OAAOD,GAAG;AACZ;AAKM,SAAUE,iBAAiBA,CAACF,GAAa,EAAA;AAC7C,EAAA,OAAQA,GAAW,CAACG,SAAS,EAAE;AACjC;AAKM,MAAOC,aAAc,SAAQC,kBAAiB,CAAA;EAClD,OAAgBC,WAAWA,GAAA;AACzBlB,IAAAA,WAAW,EAAE;AACbmB,IAAAA,kBAAiB,CAAC,IAAIH,aAAa,EAAE,CAAC;AACxC,EAAA;AAEkBI,EAAAA,iBAAiB,GAAG,KAAK;AACnC,EAAA,OAAOC,UAAU;AAEhBC,EAAAA,kBAAkBA,GAAA;IACzB,OAAOf,aAAa,CAAC,iEAAiE,CAAC;AACzF,EAAA;AAESgB,EAAAA,kBAAkBA,GAAA;AACzB,IAAA,IAAI,CAACP,aAAa,CAACK,UAAU,EAAE;AAC7BL,MAAAA,aAAa,CAACK,UAAU,GAAGjB,MAAM,CAACoB,cAAc,EAAE;AACpD,IAAA;IACA,OAAOR,aAAa,CAACK,UAAU;AACjC,EAAA;EAESI,aAAaA,CAACC,IAAS,EAAA;AAC9B,IAAA,OAAOA,IAAI,GAAGA,IAAI,CAACC,QAAQ,KAAKX,aAAa,CAACK,UAAU,CAACO,YAAY,GAAG,KAAK;AAC/E,EAAA;EACSC,YAAYA,CAACH,IAAS,EAAA;AAC7B,IAAA,OAAOA,IAAI,CAACI,UAAU,IAAIJ,IAAI;AAChC,EAAA;AAGSK,EAAAA,oBAAoBA,CAACnB,GAAa,EAAEoB,MAAc,EAAA;IACzD,IAAIA,MAAM,KAAK,QAAQ,EAAE;MACvB,OAAOpB,GAAG,CAACqB,WAAW;AACxB,IAAA;IACA,IAAID,MAAM,KAAK,UAAU,EAAE;AACzB,MAAA,OAAOpB,GAAG;AACZ,IAAA;IACA,IAAIoB,MAAM,KAAK,MAAM,EAAE;MACrB,OAAOpB,GAAG,CAACsB,IAAI;AACjB,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;EAESC,WAAWA,CAACvB,GAAa,EAAA;IAChC,MAAMwB,MAAM,GAAGxB,GAAG,CAACyB,IAAI,CAACC,QAAQ,CAACF,MAAM;IAOvC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;MAC/B,MAAMC,KAAK,GAAG5B,GAAG,CAACyB,IAAI,CAACC,QAAQ,CAACC,CAAC,CAAC;AAGlC,MAAA,IAAIC,KAAK,CAACC,OAAO,KAAK,MAAM,EAAE;AAE5B,QAAA,OAAOD,KAAK,CAACE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;AACzC,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,EAAE;AACX,EAAA;AAESC,EAAAA,aAAaA,CAACC,EAAQ,EAAEC,GAAQ,EAAA;AACvCD,IAAAA,EAAE,CAACD,aAAa,CAACE,GAAG,CAAC;AAGrB,IAAA,MAAMjC,GAAG,GAAGgC,EAAE,CAACE,aAAa,IAAIF,EAAE;AAClC,IAAA,MAAMG,GAAG,GAAInC,GAAW,CAACqB,WAAW;AACpC,IAAA,IAAIc,GAAG,EAAE;AACPA,MAAAA,GAAG,CAACJ,aAAa,CAACE,GAAG,CAAC;AACxB,IAAA;AACF,EAAA;AAESG,EAAAA,YAAYA,GAAA;AACnB,IAAA,OAAO,iBAAiB;AAC1B,EAAA;EAESC,SAASA,CAACC,IAAY,EAAA;AAC7B,IAAA,MAAM,IAAIC,KAAK,CAAC,oCAAoC,CAAC;AACvD,EAAA;AACD;;MCtFYC,cAAc,GAAG,IAAIC,cAAc,CAAiB,uBAAuB;MAQ3EC,qBAAqB,GAAG,IAAID,cAAc,CACrD,2BAA2B;MAGhBE,oBAAoB,GAAG,IAAIF,cAAc,CAAU,sBAAsB;;MClBzEG,aAAa,CAAA;EAIcC,IAAA;AAFtCC,EAAAA,mBAAmB,GAAGC,kBAAkB,CAACC,MAAM,CAACC,QAAQ,CAAC,CAAC;EAE1DC,WAAAA,CAAsCL,IAAS,EAAA;IAAT,IAAA,CAAAA,IAAI,GAAJA,IAAI;AAAQ,EAAA;AAKlDM,EAAAA,cAAcA,GAAA;IACZ,IAAIC,SAAS,IAAI,CAAC,IAAI,CAACN,mBAAmB,IAAI,CAAChD,MAAM,EAAEG,QAAQ,EAAE;AAC/D,MAAA,MAAM,IAAIsC,KAAK,CAAC,gEAAgE,CAAC;AACnF,IAAA;IAEA,MAAMc,cAAc,GAAG,gBAAgB;IACvCC,eAAc,CAACD,cAAc,CAAC;AAC9B,IAAA,MAAME,QAAQ,GAAG,IAAI,CAACT,mBAAA,GAClB5C,iBAAiB,CAAC,IAAI,CAAC2C,IAAI,CAAA,GAE3B,IAAI,CAACA,IAAI,CAACW,eAAe,CAACC,SAAS;IACvCC,cAAa,CAACL,cAAc,CAAC;AAC7B,IAAA,OAAOE,QAAQ;AACjB,EAAA;AAKAI,EAAAA,WAAWA,GAAA;IACT,OAAO,IAAI,CAACd,IAAI;AAClB,EAAA;AA7BW,EAAA,OAAAe,IAAA,GAAAC,EAAA,CAAAC,kBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,mBAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAAtB,aAAa;;aAIJuB;AAAQ,KAAA,CAAA;AAAA/C,IAAAA,MAAA,EAAAyC,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAJjBzB;AAAa,GAAA,CAAA;;;;;;QAAbA,aAAa;AAAA0B,EAAAA,UAAA,EAAA,CAAA;UADzBD;;;;;YAKcE,MAAM;aAACJ,QAAQ;;;;AA4BxB,SAAUpB,kBAAkBA,CAACyB,QAAkB,EAAA;AACnD,EAAA,OAAOA,QAAQ,CAACC,GAAG,CAAC9B,oBAAoB,EAAE,IAAI,CAAC;AACjD;;MC1Ca+B,SAAS,CAAA;EACZC,OAAO;EAMP,MAAMC,SAASA,GAAA;AACrB,IAAA,IAAI,CAAC,IAAI,CAACD,OAAO,EAAE;MACjB,MAAM;AAACE,QAAAA,OAAO,EAAEC;AAAG,OAAC,GAAG,MAAM,OAAO,MAAM,CAAC;MAC3C,IAAI,CAACH,OAAO,GAAGG,GAAG;AACpB,IAAA;AACF,EAAA;AAEAC,EAAAA,KAAKA,GAAA;AACH,IAAA,MAAMtF,IAAI,GAAG,IAAI,CAACkF,OAAO;IACzB,IAAI,CAAClF,IAAI,EAAE;AACT,MAAA,MAAM,IAAI8C,KAAK,CAAC,kEAAkE,CAAC;AACrF,IAAA;AAEA,IAAA,OAAO,IAAI9C,IAAI,CAACuF,cAAc,EAAE;AAClC,EAAA;;;;;UArBWN,SAAS;AAAAO,IAAAA,IAAA,EAAA,EAAA;AAAA7D,IAAAA,MAAA,EAAAyC,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAATK;AAAS,GAAA,CAAA;;;;;;QAATA,SAAS;AAAAJ,EAAAA,UAAA,EAAA,CAAA;UADrBD;;;AA4BD,MAAMa,iBAAiB,GAAG,gCAAgC;AAE1D,SAASC,oCAAoCA,CAC3CC,OAA6B,EAC7BC,IAAmB,EAAA;EAEnB,MAAMC,UAAU,GAAGF,OAAO,CAACvF,GAAG,CAAC0F,IAAI,EAAE;AACrC,EAAA,IAAIL,iBAAiB,CAACM,IAAI,CAACF,UAAU,CAAC,EAAE;IAEtC,OAAOD,IAAI,CAACD,OAAO,CAAC;AACtB,EAAA;AAEA,EAAA,MAAMK,gBAAgB,GAAGzC,MAAM,CAAC0C,gBAAgB,CAAC;EACjD,MAAM;IAACC,IAAI;IAAEC,QAAQ;IAAEC,QAAQ;AAAEC,IAAAA;AAAI,GAAC,GAAGL,gBAAgB;AACzD,EAAA,IAAI,CAACG,QAAQ,CAACG,UAAU,CAAC,MAAM,CAAC,EAAE;IAChC,OAAOV,IAAI,CAACD,OAAO,CAAC;AACtB,EAAA;AAEA,EAAA,IAAIY,SAAS,GAAG,CAAA,EAAGJ,QAAQ,CAAA,EAAA,EAAKC,QAAQ,CAAA,CAAE;AAC1C,EAAA,IAAIC,IAAI,EAAE;IACRE,SAAS,IAAI,CAAA,CAAA,EAAIF,IAAI,CAAA,CAAE;AACzB,EAAA;EAEA,MAAMG,QAAQ,GAAGR,gBAAgB,CAACS,kBAAkB,EAAE,IAAIP,IAAI;EAC9D,MAAMQ,OAAO,GAAG,IAAIC,GAAG,CAACH,QAAQ,EAAED,SAAS,CAAC;EAE5C,IAAIK,SAAS,GAAG,IAAID,GAAG,CAAChB,OAAO,CAACvF,GAAG,EAAEsG,OAAO,CAAC;AAE7C,EAAA,IAAIE,SAAS,CAACC,MAAM,KAAKH,OAAO,CAACG,MAAM,EAAE;AAIvC,IAAA,MAAMC,kBAAkB,GAAG,aAAa,CAACf,IAAI,CAACF,UAAU,CAAC;IACzD,IAAI,CAACiB,kBAAkB,EAAE;AAEvBF,MAAAA,SAAS,GAAG,IAAID,GAAG,CAACd,UAAU,CAACkB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,EAAEL,OAAO,CAAC;AAClE,IAAA;AACF,EAAA;AAEA,EAAA,OAAOd,IAAI,CAACD,OAAO,CAACqB,KAAK,CAAC;AAAC5G,IAAAA,GAAG,EAAEwG,SAAS,CAACK,QAAQ;AAAE,GAAC,CAAC,CAAC;AACzD;AAEO,MAAMC,qBAAqB,GAAe,CAC/C;AAACC,EAAAA,OAAO,EAAEC,UAAU;AAAEC,EAAAA,QAAQ,EAAEpC;AAAS,CAAC,EAC1C;AACEkC,EAAAA,OAAO,EAAEG,0BAAyB;AAClCC,EAAAA,QAAQ,EAAE7B,oCAAoC;AAC9C8B,EAAAA,KAAK,EAAE;AACR,CAAA,CACF;;ACvFD,MAAMC,qBAAqB,GAAG,SAAS;AAUjC,SAAUC,QAAQA,CAACC,MAA0B,EAAEd,MAAe,EAAA;EAClE,IAAI,CAACc,MAAM,EAAE;AACX,IAAA,OAAOd,MAAM,KAAKe,SAAS,GAAG,IAAIjB,GAAG,CAAC,GAAG,EAAEE,MAAM,CAAC,GAAG,IAAI;AAC3D,EAAA;AAEA,EAAA,IAAIF,GAAG,CAACkB,QAAQ,CAACF,MAAM,CAAC,EAAE;AACxB,IAAA,OAAO,IAAIhB,GAAG,CAACgB,MAAM,CAAC;AACxB,EAAA;AAEA,EAAA,IAAI,sCAAsC,CAAC5B,IAAI,CAAC4B,MAAM,CAAC,EAAE;AACvD,IAAA,MAAM,IAAI7E,KAAK,CAAC,CAAA,aAAA,EAAgB6E,MAAM,EAAE,CAAC;AAC3C,EAAA;EAEA,IAAId,MAAM,KAAKe,SAAS,EAAE;AACxB,IAAA,OAAO,IAAI;AACb,EAAA;EAEA,IAAIE,cAAc,GAAGH,MAAM,CAACZ,OAAO,CAACU,qBAAqB,EAAE,GAAG,CAAC;AAC/D,EAAA,IAAIK,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC7BA,cAAc,GAAG,CAAA,CAAA,EAAIA,cAAc,CAAA,CAAE;AACvC,EAAA;AAEA,EAAA,OAAO,IAAInB,GAAG,CAACmB,cAAc,EAAEjB,MAAM,CAAC;AACxC;;MCfakB,sBAAsB,CAAA;AACjB7B,EAAAA,IAAI,GAAW,GAAG;AAClBE,EAAAA,QAAQ,GAAW,GAAG;AACtBD,EAAAA,QAAQ,GAAW,GAAG;AACtBE,EAAAA,IAAI,GAAW,GAAG;AAClB2B,EAAAA,QAAQ,GAAW,GAAG;AACtBC,EAAAA,MAAM,GAAW,EAAE;AACnBC,EAAAA,IAAI,GAAW,EAAE;AACzBC,EAAAA,WAAW,GAAG,IAAIC,OAAO,EAAuB;AAChDhF,EAAAA,IAAI,GAAGG,MAAM,CAACmB,QAAQ,CAAC;AAE/BjB,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAM4E,MAAM,GAAG9E,MAAM,CAACR,cAAc,EAAE;AAACuF,MAAAA,QAAQ,EAAE;AAAI,KAAC,CAAC;IACvD,IAAI,CAACD,MAAM,EAAE;AACX,MAAA;AACF,IAAA;IACA,IAAIA,MAAM,CAACjI,GAAG,EAAE;MACd,MAAM;QAAC+F,QAAQ;QAAEC,QAAQ;QAAEC,IAAI;QAAE2B,QAAQ;QAAEC,MAAM;QAAEC,IAAI;AAAEhC,QAAAA;AAAI,OAAC,GAAGwB,QAAQ,CACvEW,MAAM,CAACjI,GAAG,EACV,IAAI,CAACgD,IAAI,CAACmF,QAAQ,CAAC1B,MAAM,CAC1B;MACD,IAAI,CAACV,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,IAAI,GAAGA,IAAI;MAChB,IAAI,CAAC2B,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,MAAM,GAAGA,MAAM;MACpB,IAAI,CAACC,IAAI,GAAGA,IAAI;MAChB,IAAI,CAAChC,IAAI,GAAGA,IAAI;AAClB,IAAA;AACF,EAAA;AAEAO,EAAAA,kBAAkBA,GAAA;IAChB,OAAO+B,OAAM,EAAE,CAAC1G,WAAW,CAAC,IAAI,CAACsB,IAAI,CAAE;AACzC,EAAA;EAEAqF,UAAUA,CAACC,EAA0B,EAAA;IAGnC,OAAO,MAAK,CAAE,CAAC;AACjB,EAAA;EAEAC,YAAYA,CAACD,EAA0B,EAAA;IACrC,MAAME,YAAY,GAAG,IAAI,CAACT,WAAW,CAACU,SAAS,CAACH,EAAE,CAAC;AACnD,IAAA,OAAO,MAAME,YAAY,CAACE,WAAW,EAAE;AACzC,EAAA;EAEA,IAAI1I,GAAGA,GAAA;AACL,IAAA,OAAO,CAAA,EAAG,IAAI,CAAC4H,QAAQ,CAAA,EAAG,IAAI,CAACC,MAAM,CAAA,EAAG,IAAI,CAACC,IAAI,CAAA,CAAE;AACrD,EAAA;AAEQa,EAAAA,OAAOA,CAACC,KAAa,EAAEC,MAAc,EAAA;AAC3C,IAAA,IAAI,IAAI,CAACf,IAAI,KAAKc,KAAK,EAAE;AAEvB,MAAA;AACF,IAAA;IACC,IAAuB,CAACd,IAAI,GAAGc,KAAK;AACrC,IAAA,MAAME,MAAM,GAAG,IAAI,CAAC9I,GAAG;AACvB+I,IAAAA,cAAc,CAAC,MACb,IAAI,CAAChB,WAAW,CAACvC,IAAI,CAAC;AACpBnB,MAAAA,IAAI,EAAE,YAAY;AAClB2E,MAAAA,KAAK,EAAE,IAAI;MACXH,MAAM;AACNC,MAAAA;AACsB,KAAA,CAAC,CAC1B;AACH,EAAA;AAEAG,EAAAA,YAAYA,CAACD,KAAU,EAAEE,KAAa,EAAEJ,MAAc,EAAA;AACpD,IAAA,MAAMD,MAAM,GAAG,IAAI,CAAC7I,GAAG;IACvB,MAAM;MAAC4H,QAAQ;MAAEC,MAAM;MAAEC,IAAI;MAAEhC,IAAI;AAAEC,MAAAA;AAAQ,KAAC,GAAGuB,QAAQ,CAACwB,MAAM,EAAE,IAAI,CAAC9F,IAAI,CAACmF,QAAQ,CAAC1B,MAAM,CAAC;IAC5F,MAAM0C,YAAY,GAAG,IAAsB;IAC3CA,YAAY,CAACvB,QAAQ,GAAGA,QAAQ;IAChCuB,YAAY,CAACtB,MAAM,GAAGA,MAAM;IAC5BsB,YAAY,CAACrD,IAAI,GAAGA,IAAI;IACxBqD,YAAY,CAACpD,QAAQ,GAAGA,QAAQ;AAChC,IAAA,IAAI,CAAC4C,OAAO,CAACb,IAAI,EAAEe,MAAM,CAAC;AAC5B,EAAA;AAEAO,EAAAA,SAASA,CAACJ,KAAU,EAAEE,KAAa,EAAEJ,MAAc,EAAA;IACjD,IAAI,CAACG,YAAY,CAACD,KAAK,EAAEE,KAAK,EAAEJ,MAAM,CAAC;AACzC,EAAA;AAEAO,EAAAA,OAAOA,GAAA;AACL,IAAA,MAAM,IAAI3G,KAAK,CAAC,iBAAiB,CAAC;AACpC,EAAA;AAEA4G,EAAAA,IAAIA,GAAA;AACF,IAAA,MAAM,IAAI5G,KAAK,CAAC,iBAAiB,CAAC;AACpC,EAAA;AAGA6G,EAAAA,QAAQA,GAAA;AACN,IAAA,OAAO/B,SAAS;AAClB,EAAA;;;;;UA7FWG,sBAAsB;AAAAvC,IAAAA,IAAA,EAAA,EAAA;AAAA7D,IAAAA,MAAA,EAAAyC,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAAtBmD;AAAsB,GAAA,CAAA;;;;;;QAAtBA,sBAAsB;AAAAlD,EAAAA,UAAA,EAAA,CAAA;UADlCD;;;;;ACZK,MAAOgF,wBAAyB,SAAQC,kBAAkB,CAAA;EACxBtJ,GAAA;EAAtCkD,WAAAA,CAAsClD,GAAQ,EAAA;IAC5C,KAAK,CAACA,GAAG,CAAC;IAD0B,IAAA,CAAAA,GAAG,GAAHA,GAAG;AAEzC,EAAA;EAGSuJ,QAAQA,CAACC,SAAiB,EAAA;AACjC,IAAA,OAAO,IAAI;AACb,EAAA;EAESC,gBAAgBA,CACvBC,OAAoB,EACpBF,SAAiB,EACjBG,OAAiB,EACjBC,OAAyB,EAAA;AAEzB,IAAA,OAAO3B,OAAM,EAAE,CAAC4B,WAAW,CAACH,OAAO,EAAEF,SAAS,EAAEG,OAAO,EAAEC,OAAO,CAAC;AACnE,EAAA;AAjBW,EAAA,OAAAhG,IAAA,GAAAC,EAAA,CAAAC,kBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,mBAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAAmF,wBAAwB;;aACflF;AAAQ,KAAA,CAAA;AAAA/C,IAAAA,MAAA,EAAAyC,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UADjBgF;AAAwB,GAAA,CAAA;;;;;;QAAxBA,wBAAwB;AAAA/E,EAAAA,UAAA,EAAA,CAAA;UADpCD;;;;;YAEcE,MAAM;aAACJ,QAAQ;;;;;ACS9B,MAAM2F,qBAAqB,GAAG,IAAIrH,cAAc,CAC9C,OAAOW,SAAS,KAAK,WAAW,IAAIA,SAAS,GAAG,uBAAuB,GAAG,EAAE,EAC5E;EACE2G,OAAO,EAAEA,OAAO;AAACC,IAAAA,UAAU,EAAE;GAAM;AACpC,CAAA,CACF;AAEM,MAAMC,sCAAsC,GAAe,CAChE;AACErD,EAAAA,OAAO,EAAElE,qBAAqB;AAC9BwH,EAAAA,UAAU,EAAEC,6BAA6B;AACzClD,EAAAA,KAAK,EAAE;AACR,CAAA,CACF;SAGemD,YAAYA,CAC1BpK,GAAa,EACbqK,WAAmB,EACnBC,KAAoB,EAAA;AAEpB,EAAA,MAAMC,MAAM,GAAGvK,GAAG,CAACwK,aAAa,CAAC,QAAQ,CAAC;EAC1CD,MAAM,CAACF,WAAW,GAAGA,WAAW;AAChC,EAAA,IAAIC,KAAK,EAAE;AACTC,IAAAA,MAAM,CAACE,YAAY,CAAC,OAAO,EAAEH,KAAK,CAAC;AACrC,EAAA;AAEA,EAAA,OAAOC,MAAM;AACf;AAEA,SAASG,2BAA2BA,CAAClG,QAAkB,EAAA;AACrD,EAAA,MAAMmG,mBAAmB,GAAGnG,QAAQ,CAACC,GAAG,CAACqF,qBAAqB,CAAC;EAE/D,IAAIa,mBAAmB,CAACX,UAAU,EAAE;AAClCY,IAAAA,OAAO,CAACC,IAAI,CACV,CAAA,8HAAA,CAAgI,GAC9H,CAAA,sHAAA,CAAwH,GACxH,CAAA,0DAAA,CAA4D,GAC5D,CAAA,8EAAA,CAAgF,GAChF,CAAA,qHAAA,CAAuH,CAC1H;AACH,EAAA;EAEAF,mBAAmB,CAACX,UAAU,GAAG,IAAI;AACvC;AAEA,SAASG,6BAA6BA,GAAA;AACpC,EAAA,MAAMnK,GAAG,GAAGgD,MAAM,CAACmB,QAAQ,CAAC;AAC5B,EAAA,MAAM2G,KAAK,GAAG9H,MAAM,CAAC+H,MAAM,CAAC;AAC5B,EAAA,MAAMC,aAAa,GAAGhI,MAAM,CAACiI,aAAa,CAAC;AAC3C,EAAA,MAAMzG,QAAQ,GAAGxB,MAAM,CAACC,QAAQ,CAAC;AAEjC,EAAA,OAAO,MAAK;IACV,MAAMI,cAAc,GAAG,+BAA+B;IACtDC,eAAc,CAACD,cAAc,CAAC;AAG9B,IAAA,MAAM6H,OAAO,GAAGF,aAAa,CAACG,MAAM,EAAE;IAEtC,IAAIH,aAAa,CAACI,OAAO,EAAE;AAGzB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,OAAOhI,SAAS,KAAK,WAAW,IAAIA,SAAS,EAAE;MACjDsH,2BAA2B,CAAClG,QAAQ,CAAC;AACvC,IAAA;IAEA,MAAM+F,MAAM,GAAGH,YAAY,CACzBpK,GAAG,EACHkL,OAAO,EAKP,IAAI,CACL;AACDX,IAAAA,MAAM,CAACc,EAAE,GAAGP,KAAK,GAAG,QAAQ;AAC5BP,IAAAA,MAAM,CAACE,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC;AAK/CzK,IAAAA,GAAG,CAACsB,IAAI,CAACgK,WAAW,CAACf,MAAM,CAAC;IAC5B7G,cAAa,CAACL,cAAc,CAAC;EAC/B,CAAC;AACH;;AChEO,MAAMkI,kCAAkC,GAAqB,CAClE;AAAC3E,EAAAA,OAAO,EAAEzC,QAAQ;AAAE+F,EAAAA,UAAU,EAAEsB;AAAS,CAAC,EAC1C;AAAC5E,EAAAA,OAAO,EAAE6E,WAAW;AAAEzE,EAAAA,QAAQ,EAAE0E;AAAkB,CAAC,EACpD;AAAC9E,EAAAA,OAAO,EAAE+E,oBAAoB;AAAEzB,EAAAA,UAAU,EAAE0B,iBAAiB;AAAE3E,EAAAA,KAAK,EAAE;AAAI,CAAC,EAC3E;AACEL,EAAAA,OAAO,EAAElB,gBAAgB;AACzBoB,EAAAA,QAAQ,EAAEU,sBAAsB;AAChCvC,EAAAA,IAAI,EAAE;AACP,CAAA,EACD;AAAC2B,EAAAA,OAAO,EAAEhE,aAAa;EAAEqC,IAAI,EAAE,CAACd,QAAQ;AAAC,CAAC;AAG5C,SAASyH,iBAAiBA,GAAA;AACxB,EAAA,MAAMpH,QAAQ,GAAGxB,MAAM,CAACC,QAAQ,CAAC;AACjC,EAAA,MAAMH,mBAAmB,GAAGC,kBAAkB,CAACyB,QAAQ,CAAC;AACxD,EAAA,OAAO,MAAK;AACV,IAAA,IAAI1B,mBAAmB,EAAE;MACvB1C,aAAa,CAACE,WAAW,EAAE;AAC7B,IAAA,CAAA,MAAO;MACLD,kBAAiB,CAACC,WAAW,EAAE;AACjC,IAAA;EACF,CAAC;AACH;AAEO,MAAMuL,uBAAuB,GAAe,CACjD;AAACjF,EAAAA,OAAO,EAAEkF,qBAAqB;AAAE7E,EAAAA,KAAK,EAAE,IAAI;AAAEH,EAAAA,QAAQ,EAAEuC;AAAwB,CAAC;AAG5E,MAAM0C,yBAAyB,GAAe,CACnD9B,sCAAsC,EACtC4B,uBAAuB,EACvBlF,qBAAqB,EACrB;AAACC,EAAAA,OAAO,EAAEoF,WAAW;AAAEhF,EAAAA,QAAQ,EAAE;AAAI,CAAC,EACtC;AAACJ,EAAAA,OAAO,EAAEqF,YAAW;AAAEjF,EAAAA,QAAQ,EAAE;AAAI,CAAC,EACtC;AAACJ,EAAAA,OAAO,EAAEsF,gBAAgB;AAAEpF,EAAAA,QAAQ,EAAEqF;AAAoB,CAAC;MAYhDC,YAAY,CAAA;;;;;UAAZA,YAAY;AAAAnH,IAAAA,IAAA,EAAA,EAAA;AAAA7D,IAAAA,MAAA,EAAAyC,EAAA,CAAAO,eAAA,CAAAiI;AAAA,GAAA,CAAA;AAAZ,EAAA,OAAAC,IAAA,GAAAzI,EAAA,CAAA0I,mBAAA,CAAA;AAAAxI,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,mBAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAAkI,YAAY;cAHbI,aAAa;AAAA,GAAA,CAAA;;;;;UAGZJ,YAAY;AAAAK,IAAAA,SAAA,EAFZV,yBAAyB;IAAAW,OAAA,EAAA,CAD1BF,aAAa;AAAA,GAAA,CAAA;;;;;;QAGZJ,YAAY;AAAA9H,EAAAA,UAAA,EAAA,CAAA;UAJxB+H,QAAQ;AAACM,IAAAA,IAAA,EAAA,CAAA;MACRC,OAAO,EAAE,CAACJ,aAAa,CAAC;AACxBC,MAAAA,SAAS,EAAEV;KACZ;;;AAGD,SAASP,SAASA,GAAA;AAChB,EAAA,MAAMhH,QAAQ,GAAGxB,MAAM,CAACC,QAAQ,CAAC;EACjC,MAAM6E,MAAM,GAA0BtD,QAAQ,CAACC,GAAG,CAACjC,cAAc,EAAE,IAAI,CAAC;AACxE,EAAA,MAAMM,mBAAmB,GAAGC,kBAAkB,CAACyB,QAAQ,CAAC;AACxD,EAAA,IAAIvE,QAAkB;AACtB,EAAA,IAAI6H,MAAM,IAAIA,MAAM,CAAC7H,QAAQ,EAAE;AAC7BA,IAAAA,QAAQ,GACN,OAAO6H,MAAM,CAAC7H,QAAQ,KAAK,QAAA,GACvB6C,mBAAA,GACEnD,aAAa,CACXmI,MAAM,CAAC7H,QAAQ,EACf6H,MAAM,CAACjI,GAAG,KAAKwH,SAAS,GAAGF,QAAQ,CAACW,MAAM,CAACjI,GAAG,EAAE,kBAAkB,CAAC,CAAC8F,IAAI,GAAG0B,SAAS,CAAA,GAEtFvH,MAAM,CAACG,QAAA,GACT6H,MAAM,CAAC7H,QAAQ;AACvB,EAAA,CAAA,MAAO;AACLA,IAAAA,QAAQ,GAAGgI,OAAM,EAAE,CAACvH,kBAAkB,EAAE;AAC1C,EAAA;EAEAmM,YAAY,CAAC5M,QAAQ,CAAC;AACtB,EAAA,OAAOA,QAAQ;AACjB;AAYM,SAAU6M,cAAcA,CAACC,cAA6C,EAAA;AAC1E,EAAA,MAAMC,eAAe,GAAG,OAAOC,YAAY,KAAK,WAAW;AAC3D,EAAA,IAAID,eAAe,EAAE;AACnBzN,IAAAA,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;AACnC,EAAA;AAEA,EAAA,MAAM2N,QAAQ,GAAGC,qBAAqB,CACpCC,YAAY,EACZ,QAAQ,EACR7B,kCAAkC,CACnC,CAACwB,cAAc,CAAC;AAEjB,EAAA,IAAIC,eAAe,EAAE;IACnBE,QAAQ,CAACG,SAAS,CAAC,MAAK;AACtB9N,MAAAA,UAAU,CAAC,cAAc,CAAC,GAAG8H,SAAS;AACxC,IAAA,CAAC,CAAC;AACJ,EAAA;AAEA,EAAA,OAAO6F,QAAQ;AACjB;;;;"}
1
+ {"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs';\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new RuntimeError(\n RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented',\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 {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\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 inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new RuntimeError(\n RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Disabled DOM emulation should only run in browser environments',\n );\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\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 {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;\n\n/**\n * Options for {@link resolveUrl}.\n */\nexport interface ResolveUrlOptions {\n /**\n * Allow protocol-relative URLs (e.g. `//example.com`).\n * @default false\n */\n allowProtocolRelative?: boolean;\n /**\n * Allow origin changes.\n * @default true\n */\n allowOriginChange?: boolean;\n}\n\n/**\n * Resolves a URL string.\n *\n * If an origin is provided, the URL is resolved against it. Otherwise, the URL is parsed as-is.\n * @param urlStr The URL to resolve.\n * @param origin The origin to resolve the URL against.\n * @param options Options for resolving the URL.\n * @returns A resolved URL object.\n */\nexport function resolveUrl(urlStr: string | undefined): URL | null;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin: string | URL,\n options?: ResolveUrlOptions,\n): URL;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin?: string | URL,\n options: ResolveUrlOptions = {},\n): URL | null {\n const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n\n if (!urlStr) {\n return originUrl || null;\n }\n\n urlStr = urlStr.trim();\n\n // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n let resolved: URL | undefined;\n try {\n resolved = new URL(urlStr);\n } catch {}\n const {allowProtocolRelative = false, allowOriginChange = true} = options;\n\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n }\n\n // We identify and throw on malformed absolute URLs (like double port).\n // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n if (!URL.canParse(urlStr, 'http://fake')) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_URL,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr,\n );\n }\n\n if (!originUrl) {\n return null;\n }\n\n // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n if (urlStr.startsWith('//')) {\n if (!allowProtocolRelative) {\n throw new RuntimeError(\n RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}`\n : urlStr,\n );\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n}\n\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr: string): never {\n throw new RuntimeError(\n RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`\n : urlStr,\n );\n}\n\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(\n resolved: URL,\n origin: URL,\n urlStr: string,\n allowOriginChange: boolean,\n): boolean {\n if (origin.origin === resolved.origin) {\n return true;\n }\n\n if (!allowOriginChange) {\n return false;\n }\n\n return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);\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 {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {resolveUrl} from './url';\n\n@Injectable()\n/**\n * @deprecated Use the HttpClient fetch backend (by enabling `withFetch()`) instead.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n 'XHR support in `@angular/platform-server` is deprecated and will be removed ' +\n 'in a future version of Angular. It has known security and performance issues in server ' +\n 'environments, such as forwarding `Authorization` headers on cross-origin ' +\n 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' +\n 'Please enable the HttpClient fetch backend instead by using `withFetch()`.',\n );\n }\n\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new RuntimeError(\n RuntimeErrorCode.XHR_NOT_LOADED,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Unexpected state in ServerXhr: XHR implementation is not loaded.',\n );\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n // URLs with a schema should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n const parsedUrl = resolveUrl(request.url, baseUrl, {\n allowProtocolRelative: true,\n });\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\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 {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {resolveUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private readonly _doc = inject(DOCUMENT);\n private readonly origin = this._doc.location.origin;\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href, origin} = resolveUrl(\n config.url,\n this.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n this.origin = origin;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = resolveUrl(newUrl, this.origin, {\n allowOriginChange: false,\n });\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\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, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\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 APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\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 {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {resolveUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined\n ? resolveUrl(config.url, 'http://localhost').href\n : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["setDomTypes","Object","assign","globalThis","domino","impl","Event","parseDocument","html","url","window","createWindow","doc","document","serializeDocument","serialize","DominoAdapter","BrowserDomAdapter","makeCurrent","setRootDomAdapter","supportsDOMEvents","defaultDoc","createHtmlDocument","getDefaultDocument","createDocument","isElementNode","node","nodeType","ELEMENT_NODE","isShadowRoot","shadowRoot","getGlobalEventTarget","target","defaultView","body","getBaseHref","length","head","children","i","child","tagName","getAttribute","dispatchEvent","el","evt","ownerDocument","win","getUserAgent","getCookie","name","RuntimeError","ngDevMode","INITIAL_CONFIG","InjectionToken","BEFORE_APP_SERIALIZED","ENABLE_DOM_EMULATION","PlatformState","_doc","_enableDomEmulation","enableDomEmulation","inject","Injector","constructor","renderToString","measuringLabel","startMeasuring","rendered","documentElement","outerHTML","stopMeasuring","getDocument","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","DOCUMENT","ɵɵFactoryTarget","Injectable","decorators","Inject","injector","get","HTTP_OR_HTTPS_PROTOCOL_REGEX","resolveUrl","urlStr","origin","options","originUrl","URL","trim","resolved","allowProtocolRelative","allowOriginChange","isSafeOriginChange","throwSuspiciousUrlError","canParse","startsWith","test","ServerXhr","xhrImpl","ɵloadImpl","console","warn","default","xhr","build","XMLHttpRequest","deps","URL_SCHEMA_REGEXP","relativeUrlsTransformerInterceptorFn","request","next","trimmedUrl","platformLocation","PlatformLocation","href","protocol","hostname","port","urlPrefix","baseHref","getBaseHrefFromDOM","baseUrl","parsedUrl","clone","toString","SERVER_HTTP_PROVIDERS","provide","XhrFactory","useClass","HTTP_ROOT_INTERCEPTOR_FNS","useValue","multi","ServerPlatformLocation","pathname","search","hash","_hashUpdate","Subject","location","config","optional","getDOM","onPopState","fn","onHashChange","subscription","subscribe","unsubscribe","setHash","value","oldUrl","newUrl","queueMicrotask","state","replaceState","title","writableThis","pushState","forward","Error","back","getState","undefined","ServerEventManagerPlugin","EventManagerPlugin","supports","eventName","addEventListener","element","handler","onAndCancel","TRANSFER_STATE_STATUS","factory","serialized","TRANSFER_STATE_SERIALIZATION_PROVIDERS","useFactory","serializeTransferStateFactory","createScript","textContent","nonce","script","createElement","setAttribute","warnIfStateTransferHappened","transferStateStatus","appId","APP_ID","transferStore","TransferState","content","toJson","isEmpty","id","appendChild","INTERNAL_SERVER_PLATFORM_PROVIDERS","_document","PLATFORM_ID","PLATFORM_SERVER_ID","PLATFORM_INITIALIZER","initDominoAdapter","SERVER_RENDER_PROVIDERS","EVENT_MANAGER_PLUGINS","PLATFORM_SERVER_PROVIDERS","Testability","TESTABILITY","ViewportScroller","NullViewportScroller","ServerModule","NgModule","ɵmod","ɵɵngDeclareNgModule","BrowserModule","providers","imports","args","exports","ɵsetDocument","platformServer","extraProviders","noServerModeSet","ngServerMode","platform","createPlatformFactory","platformCore","onDestroy"],"mappings":"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"}
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.15
2
+ * @license Angular v21.2.17
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @license Angular v21.2.15
2
+ * @license Angular v21.2.17
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { PLATFORM_SERVER_PROVIDERS, PlatformState, BEFORE_APP_SERIALIZED, parseUrl, platformServer, INITIAL_CONFIG, createScript } from './_server-chunk.mjs';
7
+ import { PLATFORM_SERVER_PROVIDERS, PlatformState, BEFORE_APP_SERIALIZED, resolveUrl, platformServer, INITIAL_CONFIG, createScript } from './_server-chunk.mjs';
8
8
  export { ServerModule, DominoAdapter as ɵDominoAdapter, ENABLE_DOM_EMULATION as ɵENABLE_DOM_EMULATION, INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS } from './_server-chunk.mjs';
9
- import { makeEnvironmentProviders, InjectionToken, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, ApplicationRef, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵIS_HYDRATION_DOM_REUSE_ENABLED as _IS_HYDRATION_DOM_REUSE_ENABLED, ɵannotateForHydration as _annotateForHydration, CSP_NONCE, APP_ID, Renderer2, ɵSSR_CONTENT_INTEGRITY_MARKER as _SSR_CONTENT_INTEGRITY_MARKER, Version } from '@angular/core';
9
+ import { makeEnvironmentProviders, InjectionToken, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, ApplicationRef, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵRuntimeError as _RuntimeError, ɵIS_HYDRATION_DOM_REUSE_ENABLED as _IS_HYDRATION_DOM_REUSE_ENABLED, ɵannotateForHydration as _annotateForHydration, CSP_NONCE, APP_ID, Renderer2, ɵSSR_CONTENT_INTEGRITY_MARKER as _SSR_CONTENT_INTEGRITY_MARKER, Version } from '@angular/core';
10
10
  import '@angular/common';
11
11
  import '@angular/platform-browser';
12
12
  import '../third_party/domino/bundled-domino.mjs';
@@ -193,12 +193,12 @@ async function renderApplication(bootstrap, options) {
193
193
  }
194
194
  function validateAllowedHosts(url, allowedHosts) {
195
195
  if (typeof url === 'string') {
196
- const parsedUrl = parseUrl(url);
196
+ const parsedUrl = resolveUrl(url);
197
197
  if (parsedUrl !== null) {
198
198
  const hostname = parsedUrl.hostname;
199
199
  const allowedHostsSet = new Set(allowedHosts);
200
200
  if (!isHostAllowed(hostname, allowedHostsSet)) {
201
- throw new Error(`Host ${url} is not allowed. You can configure \`allowedHosts\` option.`);
201
+ throw new _RuntimeError(5706, typeof ngDevMode === 'undefined' || ngDevMode ? `Host ${url} is not allowed. You can configure \`allowedHosts\` option.` : url);
202
202
  }
203
203
  }
204
204
  }
@@ -219,7 +219,7 @@ function isHostAllowed(hostname, allowedHosts) {
219
219
  return false;
220
220
  }
221
221
 
222
- const VERSION = /* @__PURE__ */new Version('21.2.15');
222
+ const VERSION = /* @__PURE__ */new Version('21.2.17');
223
223
 
224
224
  export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
225
225
  //# sourceMappingURL=platform-server.mjs.map