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

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.1
2
+ * @license Angular v22.0.0-rc.2
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.1",
112
+ version: "22.0.0-rc.2",
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.1",
122
+ version: "22.0.0-rc.2",
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.1",
129
+ version: "22.0.0-rc.2",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -163,7 +163,7 @@ class ServerXhr {
163
163
  }
164
164
  static ɵfac = i0.ɵɵngDeclareFactory({
165
165
  minVersion: "12.0.0",
166
- version: "22.0.0-rc.1",
166
+ version: "22.0.0-rc.2",
167
167
  ngImport: i0,
168
168
  type: ServerXhr,
169
169
  deps: [],
@@ -171,21 +171,26 @@ class ServerXhr {
171
171
  });
172
172
  static ɵprov = i0.ɵɵngDeclareInjectable({
173
173
  minVersion: "12.0.0",
174
- version: "22.0.0-rc.1",
174
+ version: "22.0.0-rc.2",
175
175
  ngImport: i0,
176
176
  type: ServerXhr
177
177
  });
178
178
  }
179
179
  i0.ɵɵngDeclareClassMetadata({
180
180
  minVersion: "12.0.0",
181
- version: "22.0.0-rc.1",
181
+ version: "22.0.0-rc.2",
182
182
  ngImport: i0,
183
183
  type: ServerXhr,
184
184
  decorators: [{
185
185
  type: Injectable
186
186
  }]
187
187
  });
188
+ const URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\-.]*:)/;
188
189
  function relativeUrlsTransformerInterceptorFn(request, next) {
190
+ const trimmedUrl = request.url.trim();
191
+ if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {
192
+ return next(request);
193
+ }
189
194
  const platformLocation = inject(PlatformLocation);
190
195
  const {
191
196
  href,
@@ -202,9 +207,15 @@ function relativeUrlsTransformerInterceptorFn(request, next) {
202
207
  }
203
208
  const baseHref = platformLocation.getBaseHrefFromDOM() || href;
204
209
  const baseUrl = new URL(baseHref, urlPrefix);
205
- const newUrl = new URL(request.url, baseUrl).toString();
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
+ }
206
217
  return next(request.clone({
207
- url: newUrl
218
+ url: parsedUrl.toString()
208
219
  }));
209
220
  }
210
221
  const SERVER_HTTP_PROVIDERS = [{
@@ -216,15 +227,27 @@ const SERVER_HTTP_PROVIDERS = [{
216
227
  multi: true
217
228
  }];
218
229
 
230
+ const LEADING_SLASHES_REGEX = /^[/\\]+/;
219
231
  function parseUrl(urlStr, origin) {
232
+ if (!urlStr) {
233
+ return origin !== undefined ? new URL('/', origin) : null;
234
+ }
220
235
  if (URL.canParse(urlStr)) {
221
236
  return new URL(urlStr);
222
237
  }
223
- if (urlStr && urlStr[0] !== '/') {
224
- urlStr = `/${urlStr}`;
238
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:(\/\/|\\\\)/.test(urlStr)) {
239
+ throw new Error(`Invalid URL: ${urlStr}`);
225
240
  }
226
- return new URL(origin + urlStr);
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);
227
249
  }
250
+
228
251
  class ServerPlatformLocation {
229
252
  href = '/';
230
253
  hostname = '/';
@@ -317,7 +340,7 @@ class ServerPlatformLocation {
317
340
  }
318
341
  static ɵfac = i0.ɵɵngDeclareFactory({
319
342
  minVersion: "12.0.0",
320
- version: "22.0.0-rc.1",
343
+ version: "22.0.0-rc.2",
321
344
  ngImport: i0,
322
345
  type: ServerPlatformLocation,
323
346
  deps: [],
@@ -325,14 +348,14 @@ class ServerPlatformLocation {
325
348
  });
326
349
  static ɵprov = i0.ɵɵngDeclareInjectable({
327
350
  minVersion: "12.0.0",
328
- version: "22.0.0-rc.1",
351
+ version: "22.0.0-rc.2",
329
352
  ngImport: i0,
330
353
  type: ServerPlatformLocation
331
354
  });
332
355
  }
333
356
  i0.ɵɵngDeclareClassMetadata({
334
357
  minVersion: "12.0.0",
335
- version: "22.0.0-rc.1",
358
+ version: "22.0.0-rc.2",
336
359
  ngImport: i0,
337
360
  type: ServerPlatformLocation,
338
361
  decorators: [{
@@ -355,7 +378,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
355
378
  }
356
379
  static ɵfac = i0.ɵɵngDeclareFactory({
357
380
  minVersion: "12.0.0",
358
- version: "22.0.0-rc.1",
381
+ version: "22.0.0-rc.2",
359
382
  ngImport: i0,
360
383
  type: ServerEventManagerPlugin,
361
384
  deps: [{
@@ -365,14 +388,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
365
388
  });
366
389
  static ɵprov = i0.ɵɵngDeclareInjectable({
367
390
  minVersion: "12.0.0",
368
- version: "22.0.0-rc.1",
391
+ version: "22.0.0-rc.2",
369
392
  ngImport: i0,
370
393
  type: ServerEventManagerPlugin
371
394
  });
372
395
  }
373
396
  i0.ɵɵngDeclareClassMetadata({
374
397
  minVersion: "12.0.0",
375
- version: "22.0.0-rc.1",
398
+ version: "22.0.0-rc.2",
376
399
  ngImport: i0,
377
400
  type: ServerEventManagerPlugin,
378
401
  decorators: [{
@@ -482,7 +505,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
482
505
  class ServerModule {
483
506
  static ɵfac = i0.ɵɵngDeclareFactory({
484
507
  minVersion: "12.0.0",
485
- version: "22.0.0-rc.1",
508
+ version: "22.0.0-rc.2",
486
509
  ngImport: i0,
487
510
  type: ServerModule,
488
511
  deps: [],
@@ -490,14 +513,14 @@ class ServerModule {
490
513
  });
491
514
  static ɵmod = i0.ɵɵngDeclareNgModule({
492
515
  minVersion: "14.0.0",
493
- version: "22.0.0-rc.1",
516
+ version: "22.0.0-rc.2",
494
517
  ngImport: i0,
495
518
  type: ServerModule,
496
519
  exports: [BrowserModule]
497
520
  });
498
521
  static ɵinj = i0.ɵɵngDeclareInjector({
499
522
  minVersion: "12.0.0",
500
- version: "22.0.0-rc.1",
523
+ version: "22.0.0-rc.2",
501
524
  ngImport: i0,
502
525
  type: ServerModule,
503
526
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -506,7 +529,7 @@ class ServerModule {
506
529
  }
507
530
  i0.ɵɵngDeclareClassMetadata({
508
531
  minVersion: "12.0.0",
509
- version: "22.0.0-rc.1",
532
+ version: "22.0.0-rc.2",
510
533
  ngImport: i0,
511
534
  type: ServerModule,
512
535
  decorators: [{
@@ -523,7 +546,7 @@ function _document() {
523
546
  const _enableDomEmulation = enableDomEmulation(injector);
524
547
  let document;
525
548
  if (config && config.document) {
526
- document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url) : window.document : 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;
527
550
  } else {
528
551
  document = _getDOM().createHtmlDocument();
529
552
  }
@@ -544,5 +567,5 @@ function platformServer(extraProviders) {
544
567
  return platform;
545
568
  }
546
569
 
547
- export { BEFORE_APP_SERIALIZED, DominoAdapter, ENABLE_DOM_EMULATION, INITIAL_CONFIG, INTERNAL_SERVER_PLATFORM_PROVIDERS, PLATFORM_SERVER_PROVIDERS, PlatformState, SERVER_RENDER_PROVIDERS, ServerModule, createScript, platformServer };
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 };
548
571
  //# 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 HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\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\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\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 const newUrl = new URL(request.url, baseUrl).toString();\n\n return next(request.clone({url: newUrl}));\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';\n\n/**\n * Parses a URL string and returns a URL object.\n * @param urlStr The string to parse.\n * @param origin The origin to use for resolving the URL.\n * @returns The parsed URL.\n */\nexport function parseUrl(urlStr: string, origin: string): URL {\n if (URL.canParse(urlStr)) {\n return new URL(urlStr);\n }\n\n if (urlStr && urlStr[0] !== '/') {\n urlStr = `/${urlStr}`;\n }\n\n return new URL(origin + urlStr);\n}\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 {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(config.document, config.url)\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","relativeUrlsTransformerInterceptorFn","request","next","platformLocation","PlatformLocation","href","protocol","hostname","port","startsWith","urlPrefix","baseHref","getBaseHrefFromDOM","baseUrl","URL","newUrl","toString","clone","SERVER_HTTP_PROVIDERS","provide","XhrFactory","useClass","HTTP_ROOT_INTERCEPTOR_FNS","useValue","multi","parseUrl","urlStr","origin","canParse","ServerPlatformLocation","pathname","search","hash","_hashUpdate","Subject","config","optional","location","getDOM","onPopState","fn","onHashChange","subscription","subscribe","unsubscribe","setHash","value","oldUrl","queueMicrotask","state","replaceState","title","writableThis","pushState","forward","back","getState","undefined","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":"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"}
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":"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"}
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.1
2
+ * @license Angular v22.0.0-rc.2
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,23 +1,30 @@
1
1
  /**
2
- * @license Angular v22.0.0-rc.1
2
+ * @license Angular v22.0.0-rc.2
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, platformServer, INITIAL_CONFIG, createScript } from './_server-chunk.mjs';
7
+ import { PLATFORM_SERVER_PROVIDERS, PlatformState, BEFORE_APP_SERIALIZED, parseUrl, 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
+ import { ɵHTTP_FETCH_MAX_RESPONSE_SIZE as _HTTP_FETCH_MAX_RESPONSE_SIZE } from '@angular/common/http';
10
11
  import '@angular/common';
11
12
  import '@angular/platform-browser';
12
13
  import '../third_party/domino/bundled-domino.mjs';
13
- import '@angular/common/http';
14
14
  import 'rxjs';
15
15
 
16
- function provideServerRendering() {
16
+ function provideServerRendering(options) {
17
17
  if (typeof ngServerMode === 'undefined') {
18
18
  globalThis['ngServerMode'] = true;
19
19
  }
20
- return makeEnvironmentProviders([...PLATFORM_SERVER_PROVIDERS]);
20
+ const providers = [...PLATFORM_SERVER_PROVIDERS];
21
+ if (options?.maxResponseBodySize) {
22
+ providers.push({
23
+ provide: _HTTP_FETCH_MAX_RESPONSE_SIZE,
24
+ useValue: options.maxResponseBodySize
25
+ });
26
+ }
27
+ return makeEnvironmentProviders(providers);
21
28
  }
22
29
 
23
30
  const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';
@@ -192,11 +199,14 @@ async function renderApplication(bootstrap, options) {
192
199
  }
193
200
  }
194
201
  function validateAllowedHosts(url, allowedHosts) {
195
- if (typeof url === 'string' && URL.canParse(url)) {
196
- const hostname = new URL(url).hostname;
197
- const allowedHostsSet = new Set(allowedHosts);
198
- if (!isHostAllowed(hostname, allowedHostsSet)) {
199
- throw new Error(`Host ${url} is not allowed. You can configure \`allowedHosts\` option.`);
202
+ if (typeof url === 'string') {
203
+ const parsedUrl = parseUrl(url);
204
+ if (parsedUrl !== null) {
205
+ const hostname = parsedUrl.hostname;
206
+ const allowedHostsSet = new Set(allowedHosts);
207
+ if (!isHostAllowed(hostname, allowedHostsSet)) {
208
+ throw new Error(`Host ${url} is not allowed. You can configure \`allowedHosts\` option.`);
209
+ }
200
210
  }
201
211
  }
202
212
  }
@@ -216,7 +226,7 @@ function isHostAllowed(hostname, allowedHosts) {
216
226
  return false;
217
227
  }
218
228
 
219
- const VERSION = /* @__PURE__ */new Version('22.0.0-rc.1');
229
+ const VERSION = /* @__PURE__ */new Version('22.0.0-rc.2');
220
230
 
221
231
  export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
222
232
  //# sourceMappingURL=platform-server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {PLATFORM_SERVER_PROVIDERS} from './server';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nexport function provideServerRendering(): EnvironmentProviders {\n if (typeof ngServerMode === 'undefined') {\n globalThis['ngServerMode'] = true;\n }\n\n return makeEnvironmentProviders([...PLATFORM_SERVER_PROVIDERS]);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n APP_ID,\n ApplicationRef,\n CSP_NONCE,\n InjectionToken,\n PlatformRef,\n Provider,\n Renderer2,\n StaticProvider,\n Type,\n ɵannotateForHydration as annotateForHydration,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER as INTERNAL_APPLICATION_ERROR_HANDLER,\n ɵIS_HYDRATION_DOM_REUSE_ENABLED as IS_HYDRATION_DOM_REUSE_ENABLED,\n ɵSSR_CONTENT_INTEGRITY_MARKER as SSR_CONTENT_INTEGRITY_MARKER,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string' && URL.canParse(url)) {\n const hostname = new URL(url).hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new Error(`Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`);\n }\n }\n}\n\n/**\n * Checks if the hostname is allowed.\n * @param hostname - The hostname to check.\n * @param allowedHosts - A set of allowed hostnames.\n * @returns `true` if the hostname is allowed, `false` otherwise.\n * @note Used also in `@angular/ssr`.\n * @private\n */\nexport function isHostAllowed(hostname: string, allowedHosts: ReadonlySet<string>): boolean {\n if (allowedHosts.has('*') || allowedHosts.has(hostname)) {\n return true;\n }\n\n for (const allowedHost of allowedHosts) {\n if (!allowedHost.startsWith('*.')) {\n continue;\n }\n\n const domain = allowedHost.slice(1);\n if (hostname.endsWith(domain)) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.0-rc.1');\n"],"names":["provideServerRendering","ngServerMode","globalThis","makeEnvironmentProviders","PLATFORM_SERVER_PROVIDERS","EVENT_DISPATCH_SCRIPT_ID","createServerPlatform","options","extraProviders","platformProviders","measuringLabel","startMeasuring","document","url","platform","platformServer","provide","INITIAL_CONFIG","useValue","stopMeasuring","findEventDispatchScript","doc","getElementById","removeEventDispatchScript","remove","prepareForHydration","platformState","applicationRef","environmentInjector","injector","getDocument","get","IS_HYDRATION_DOM_REUSE_ENABLED","appendSsrContentIntegrityMarker","eventTypesToReplay","annotateForHydration","regular","size","capture","insertEventRecordScript","APP_ID","CSP_NONCE","comment","createComment","SSR_CONTENT_INTEGRITY_MARKER","body","firstChild","insertBefore","append","appendServerContextInfo","serverContext","sanitizeServerContext","SERVER_CONTEXT","DEFAULT_SERVER_CONTEXT","components","forEach","componentRef","renderer","Renderer2","element","location","nativeElement","setAttribute","appId","nonce","eventDispatchScript","replayScriptContents","JSON","stringify","Array","from","replayScript","createScript","after","renderInternal","platformRef","PlatformState","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","callbacks","BEFORE_APP_SERIALIZED","asyncCallbacks","callback","callbackResult","push","e","length","result","Promise","allSettled","status","reason","renderToString","asyncDestroyPlatform","resolve","setTimeout","destroy","InjectionToken","context","replace","renderModule","moduleType","allowedHosts","validateAllowedHosts","moduleRef","bootstrapModule","ApplicationRef","whenStable","renderApplication","bootstrap","renderAppLabel","bootstrapLabel","_renderLabel","rendered","URL","canParse","hostname","allowedHostsSet","Set","isHostAllowed","Error","has","allowedHost","startsWith","domain","slice","endsWith","VERSION","Version"],"mappings":"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"}
1
+ {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {ɵHTTP_FETCH_MAX_RESPONSE_SIZE as HTTP_FETCH_MAX_RESPONSE_SIZE} from '@angular/common/http';\nimport {PLATFORM_SERVER_PROVIDERS} from './server';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @param options An object to configure the server providers. Currently supports the following options:\n * - `maxResponseBodySize`: The maximum allowed response body size when using the Fetch API.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nexport function provideServerRendering(options?: {\n maxResponseBodySize: number;\n}): EnvironmentProviders {\n if (typeof ngServerMode === 'undefined') {\n globalThis['ngServerMode'] = true;\n }\n\n const providers = [...PLATFORM_SERVER_PROVIDERS];\n if (options?.maxResponseBodySize) {\n providers.push({provide: HTTP_FETCH_MAX_RESPONSE_SIZE, useValue: options.maxResponseBodySize});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n APP_ID,\n ApplicationRef,\n CSP_NONCE,\n InjectionToken,\n PlatformRef,\n Provider,\n Renderer2,\n StaticProvider,\n Type,\n ɵannotateForHydration as annotateForHydration,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER as INTERNAL_APPLICATION_ERROR_HANDLER,\n ɵIS_HYDRATION_DOM_REUSE_ENABLED as IS_HYDRATION_DOM_REUSE_ENABLED,\n ɵSSR_CONTENT_INTEGRITY_MARKER as SSR_CONTENT_INTEGRITY_MARKER,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\nimport {parseUrl} from './url';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string') {\n const parsedUrl = parseUrl(url);\n if (parsedUrl !== null) {\n const hostname = parsedUrl.hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new Error(`Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`);\n }\n }\n }\n}\n\n/**\n * Checks if the hostname is allowed.\n * @param hostname - The hostname to check.\n * @param allowedHosts - A set of allowed hostnames.\n * @returns `true` if the hostname is allowed, `false` otherwise.\n * @note Used also in `@angular/ssr`.\n * @private\n */\nexport function isHostAllowed(hostname: string, allowedHosts: ReadonlySet<string>): boolean {\n if (allowedHosts.has('*') || allowedHosts.has(hostname)) {\n return true;\n }\n\n for (const allowedHost of allowedHosts) {\n if (!allowedHost.startsWith('*.')) {\n continue;\n }\n\n const domain = allowedHost.slice(1);\n if (hostname.endsWith(domain)) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = /* @__PURE__ */ new Version('22.0.0-rc.2');\n"],"names":["provideServerRendering","options","ngServerMode","globalThis","providers","PLATFORM_SERVER_PROVIDERS","maxResponseBodySize","push","provide","HTTP_FETCH_MAX_RESPONSE_SIZE","useValue","makeEnvironmentProviders","EVENT_DISPATCH_SCRIPT_ID","createServerPlatform","extraProviders","platformProviders","measuringLabel","startMeasuring","document","url","platform","platformServer","INITIAL_CONFIG","stopMeasuring","findEventDispatchScript","doc","getElementById","removeEventDispatchScript","remove","prepareForHydration","platformState","applicationRef","environmentInjector","injector","getDocument","get","IS_HYDRATION_DOM_REUSE_ENABLED","appendSsrContentIntegrityMarker","eventTypesToReplay","annotateForHydration","regular","size","capture","insertEventRecordScript","APP_ID","CSP_NONCE","comment","createComment","SSR_CONTENT_INTEGRITY_MARKER","body","firstChild","insertBefore","append","appendServerContextInfo","serverContext","sanitizeServerContext","SERVER_CONTEXT","DEFAULT_SERVER_CONTEXT","components","forEach","componentRef","renderer","Renderer2","element","location","nativeElement","setAttribute","appId","nonce","eventDispatchScript","replayScriptContents","JSON","stringify","Array","from","replayScript","createScript","after","renderInternal","platformRef","PlatformState","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","callbacks","BEFORE_APP_SERIALIZED","asyncCallbacks","callback","callbackResult","e","length","result","Promise","allSettled","status","reason","renderToString","asyncDestroyPlatform","resolve","setTimeout","destroy","InjectionToken","context","replace","renderModule","moduleType","allowedHosts","validateAllowedHosts","moduleRef","bootstrapModule","ApplicationRef","whenStable","renderApplication","bootstrap","renderAppLabel","bootstrapLabel","_renderLabel","rendered","parsedUrl","parseUrl","hostname","allowedHostsSet","Set","isHostAllowed","Error","has","allowedHost","startsWith","domain","slice","endsWith","VERSION","Version"],"mappings":"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"}