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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.2
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -109,7 +109,7 @@ class PlatformState {
109
109
  }
110
110
  static ɵfac = i0.ɵɵngDeclareFactory({
111
111
  minVersion: "12.0.0",
112
- version: "22.0.0-rc.2",
112
+ version: "22.0.0",
113
113
  ngImport: i0,
114
114
  type: PlatformState,
115
115
  deps: [{
@@ -119,14 +119,14 @@ class PlatformState {
119
119
  });
120
120
  static ɵprov = i0.ɵɵngDeclareInjectable({
121
121
  minVersion: "12.0.0",
122
- version: "22.0.0-rc.2",
122
+ version: "22.0.0",
123
123
  ngImport: i0,
124
124
  type: PlatformState
125
125
  });
126
126
  }
127
127
  i0.ɵɵngDeclareClassMetadata({
128
128
  minVersion: "12.0.0",
129
- version: "22.0.0-rc.2",
129
+ version: "22.0.0",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -144,6 +144,51 @@ 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
+ if (resolved) {
159
+ if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr)) {
160
+ throwSuspiciousUrlError(urlStr);
161
+ }
162
+ return resolved;
163
+ }
164
+ if (!URL.canParse(urlStr, 'http://fake')) {
165
+ throw new Error(`Invalid URL: ${urlStr}`);
166
+ }
167
+ if (!originUrl) {
168
+ return null;
169
+ }
170
+ const {
171
+ allowProtocolRelative = false
172
+ } = options;
173
+ if (urlStr.startsWith('//')) {
174
+ if (!allowProtocolRelative) {
175
+ throw new Error(`Protocol relative URLs are not allowed in this context. URL: ${urlStr}`);
176
+ }
177
+ return new URL(urlStr, origin);
178
+ }
179
+ resolved = new URL(urlStr, origin);
180
+ if (!isSafeOriginChange(resolved, originUrl, urlStr)) {
181
+ throwSuspiciousUrlError(urlStr);
182
+ }
183
+ return resolved;
184
+ }
185
+ function throwSuspiciousUrlError(urlStr) {
186
+ throw new Error(`URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`);
187
+ }
188
+ function isSafeOriginChange(resolved, origin, urlStr) {
189
+ return origin.origin === resolved.origin || HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);
190
+ }
191
+
147
192
  class ServerXhr {
148
193
  xhrImpl;
149
194
  async ɵloadImpl() {
@@ -163,7 +208,7 @@ class ServerXhr {
163
208
  }
164
209
  static ɵfac = i0.ɵɵngDeclareFactory({
165
210
  minVersion: "12.0.0",
166
- version: "22.0.0-rc.2",
211
+ version: "22.0.0",
167
212
  ngImport: i0,
168
213
  type: ServerXhr,
169
214
  deps: [],
@@ -171,14 +216,14 @@ class ServerXhr {
171
216
  });
172
217
  static ɵprov = i0.ɵɵngDeclareInjectable({
173
218
  minVersion: "12.0.0",
174
- version: "22.0.0-rc.2",
219
+ version: "22.0.0",
175
220
  ngImport: i0,
176
221
  type: ServerXhr
177
222
  });
178
223
  }
179
224
  i0.ɵɵngDeclareClassMetadata({
180
225
  minVersion: "12.0.0",
181
- version: "22.0.0-rc.2",
226
+ version: "22.0.0",
182
227
  ngImport: i0,
183
228
  type: ServerXhr,
184
229
  decorators: [{
@@ -207,13 +252,9 @@ function relativeUrlsTransformerInterceptorFn(request, next) {
207
252
  }
208
253
  const baseHref = platformLocation.getBaseHrefFromDOM() || href;
209
254
  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
- }
255
+ const parsedUrl = resolveUrl(request.url, baseUrl, {
256
+ allowProtocolRelative: true
257
+ });
217
258
  return next(request.clone({
218
259
  url: parsedUrl.toString()
219
260
  }));
@@ -227,27 +268,6 @@ const SERVER_HTTP_PROVIDERS = [{
227
268
  multi: true
228
269
  }];
229
270
 
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
271
  class ServerPlatformLocation {
252
272
  href = '/';
253
273
  hostname = '/';
@@ -274,7 +294,7 @@ class ServerPlatformLocation {
274
294
  search,
275
295
  hash,
276
296
  href
277
- } = parseUrl(config.url, this._doc.location.origin);
297
+ } = resolveUrl(config.url, this._doc.location.origin);
278
298
  this.protocol = protocol;
279
299
  this.hostname = hostname;
280
300
  this.port = port;
@@ -318,7 +338,7 @@ class ServerPlatformLocation {
318
338
  hash,
319
339
  href,
320
340
  protocol
321
- } = parseUrl(newUrl, this._doc.location.origin);
341
+ } = resolveUrl(newUrl, this._doc.location.origin);
322
342
  const writableThis = this;
323
343
  writableThis.pathname = pathname;
324
344
  writableThis.search = search;
@@ -340,7 +360,7 @@ class ServerPlatformLocation {
340
360
  }
341
361
  static ɵfac = i0.ɵɵngDeclareFactory({
342
362
  minVersion: "12.0.0",
343
- version: "22.0.0-rc.2",
363
+ version: "22.0.0",
344
364
  ngImport: i0,
345
365
  type: ServerPlatformLocation,
346
366
  deps: [],
@@ -348,14 +368,14 @@ class ServerPlatformLocation {
348
368
  });
349
369
  static ɵprov = i0.ɵɵngDeclareInjectable({
350
370
  minVersion: "12.0.0",
351
- version: "22.0.0-rc.2",
371
+ version: "22.0.0",
352
372
  ngImport: i0,
353
373
  type: ServerPlatformLocation
354
374
  });
355
375
  }
356
376
  i0.ɵɵngDeclareClassMetadata({
357
377
  minVersion: "12.0.0",
358
- version: "22.0.0-rc.2",
378
+ version: "22.0.0",
359
379
  ngImport: i0,
360
380
  type: ServerPlatformLocation,
361
381
  decorators: [{
@@ -378,7 +398,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
378
398
  }
379
399
  static ɵfac = i0.ɵɵngDeclareFactory({
380
400
  minVersion: "12.0.0",
381
- version: "22.0.0-rc.2",
401
+ version: "22.0.0",
382
402
  ngImport: i0,
383
403
  type: ServerEventManagerPlugin,
384
404
  deps: [{
@@ -388,14 +408,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
388
408
  });
389
409
  static ɵprov = i0.ɵɵngDeclareInjectable({
390
410
  minVersion: "12.0.0",
391
- version: "22.0.0-rc.2",
411
+ version: "22.0.0",
392
412
  ngImport: i0,
393
413
  type: ServerEventManagerPlugin
394
414
  });
395
415
  }
396
416
  i0.ɵɵngDeclareClassMetadata({
397
417
  minVersion: "12.0.0",
398
- version: "22.0.0-rc.2",
418
+ version: "22.0.0",
399
419
  ngImport: i0,
400
420
  type: ServerEventManagerPlugin,
401
421
  decorators: [{
@@ -505,7 +525,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
505
525
  class ServerModule {
506
526
  static ɵfac = i0.ɵɵngDeclareFactory({
507
527
  minVersion: "12.0.0",
508
- version: "22.0.0-rc.2",
528
+ version: "22.0.0",
509
529
  ngImport: i0,
510
530
  type: ServerModule,
511
531
  deps: [],
@@ -513,14 +533,14 @@ class ServerModule {
513
533
  });
514
534
  static ɵmod = i0.ɵɵngDeclareNgModule({
515
535
  minVersion: "14.0.0",
516
- version: "22.0.0-rc.2",
536
+ version: "22.0.0",
517
537
  ngImport: i0,
518
538
  type: ServerModule,
519
539
  exports: [BrowserModule]
520
540
  });
521
541
  static ɵinj = i0.ɵɵngDeclareInjector({
522
542
  minVersion: "12.0.0",
523
- version: "22.0.0-rc.2",
543
+ version: "22.0.0",
524
544
  ngImport: i0,
525
545
  type: ServerModule,
526
546
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -529,7 +549,7 @@ class ServerModule {
529
549
  }
530
550
  i0.ɵɵngDeclareClassMetadata({
531
551
  minVersion: "12.0.0",
532
- version: "22.0.0-rc.2",
552
+ version: "22.0.0",
533
553
  ngImport: i0,
534
554
  type: ServerModule,
535
555
  decorators: [{
@@ -546,7 +566,7 @@ function _document() {
546
566
  const _enableDomEmulation = enableDomEmulation(injector);
547
567
  let document;
548
568
  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;
569
+ document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url !== undefined ? resolveUrl(config.url, 'http://localhost').href : undefined) : window.document : config.document;
550
570
  } else {
551
571
  document = _getDOM().createHtmlDocument();
552
572
  }
@@ -567,5 +587,5 @@ function platformServer(extraProviders) {
567
587
  return platform;
568
588
  }
569
589
 
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 };
590
+ 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
591
  //# 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 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\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 */\n allowProtocolRelative?: 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\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr)) {\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 Error(`Invalid URL: ${urlStr}`);\n }\n\n if (!originUrl) {\n return null;\n }\n\n const {allowProtocolRelative = false} = options;\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 Error(`Protocol relative URLs are not allowed in this context. URL: ${urlStr}`);\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr)) {\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 Error(\n `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`,\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 * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(resolved: URL, origin: URL, urlStr: string): boolean {\n return origin.origin === resolved.origin || 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} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {resolveUrl} from './url';\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 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 _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} = resolveUrl(\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} = resolveUrl(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 {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","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","HTTP_OR_HTTPS_PROTOCOL_REGEX","resolveUrl","urlStr","origin","options","originUrl","URL","trim","resolved","isSafeOriginChange","throwSuspiciousUrlError","canParse","allowProtocolRelative","startsWith","test","ServerXhr","xhrImpl","ɵloadImpl","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","config","optional","location","getDOM","onPopState","fn","onHashChange","subscription","subscribe","unsubscribe","setHash","value","oldUrl","newUrl","queueMicrotask","state","replaceState","title","writableThis","pushState","forward","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","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":"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"}
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.2
2
+ * @license Angular v22.0.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.2
2
+ * @license Angular v22.0.0
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
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';
10
10
  import { ɵHTTP_FETCH_MAX_RESPONSE_SIZE as _HTTP_FETCH_MAX_RESPONSE_SIZE } from '@angular/common/http';
@@ -200,7 +200,7 @@ async function renderApplication(bootstrap, options) {
200
200
  }
201
201
  function validateAllowedHosts(url, allowedHosts) {
202
202
  if (typeof url === 'string') {
203
- const parsedUrl = parseUrl(url);
203
+ const parsedUrl = resolveUrl(url);
204
204
  if (parsedUrl !== null) {
205
205
  const hostname = parsedUrl.hostname;
206
206
  const allowedHostsSet = new Set(allowedHosts);
@@ -226,7 +226,7 @@ function isHostAllowed(hostname, allowedHosts) {
226
226
  return false;
227
227
  }
228
228
 
229
- const VERSION = /* @__PURE__ */new Version('22.0.0-rc.2');
229
+ const VERSION = /* @__PURE__ */new Version('22.0.0');
230
230
 
231
231
  export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
232
232
  //# sourceMappingURL=platform-server.mjs.map