New:Socket for Asana Is Now Available.Learn more
Get Started

@angular/platform-server

Package Overview
Dependencies
Maintainers
2
Versions
1101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@angular/platform-server - npm Package Compare versions

Comparing version
22.2.0-next.3
to
22.2.0-next.4
+17
-18
fesm2022/_server-chunk.mjs
/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -112,3 +112,3 @@ * License: MIT

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -123,3 +123,3 @@ type: PlatformState,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -131,3 +131,3 @@ type: PlatformState

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -156,3 +156,2 @@ type: PlatformState,

}
urlStr = urlStr.trim();
let resolved;

@@ -225,3 +224,3 @@ try {

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -234,3 +233,3 @@ type: ServerXhr,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -242,3 +241,3 @@ type: ServerXhr

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -385,3 +384,3 @@ type: ServerXhr,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -394,3 +393,3 @@ type: ServerPlatformLocation,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -402,3 +401,3 @@ type: ServerPlatformLocation

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -426,3 +425,3 @@ type: ServerPlatformLocation,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -437,3 +436,3 @@ type: ServerEventManagerPlugin,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -445,3 +444,3 @@ type: ServerEventManagerPlugin

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -556,3 +555,3 @@ type: ServerEventManagerPlugin,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -565,3 +564,3 @@ type: ServerModule,

minVersion: "14.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -573,3 +572,3 @@ type: ServerModule,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -583,3 +582,3 @@ type: ServerModule,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -586,0 +585,0 @@ type: ServerModule,

@@ -1,1 +0,1 @@

{"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs'; // 3p-only\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new RuntimeError(\n RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new RuntimeError(\n RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Disabled DOM emulation should only run in browser environments',\n );\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;\n\n/**\n * Options for {@link resolveUrl}.\n */\nexport interface ResolveUrlOptions {\n /**\n * Allow protocol-relative URLs (e.g. `//example.com`).\n * @default false\n */\n allowProtocolRelative?: boolean;\n /**\n * Allow origin changes.\n * @default true\n */\n allowOriginChange?: boolean;\n}\n\n/**\n * Resolves a URL string.\n *\n * If an origin is provided, the URL is resolved against it. Otherwise, the URL is parsed as-is.\n * @param urlStr The URL to resolve.\n * @param origin The origin to resolve the URL against.\n * @param options Options for resolving the URL.\n * @returns A resolved URL object.\n */\nexport function resolveUrl(urlStr: string | undefined): URL | null;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin: string | URL,\n options?: ResolveUrlOptions,\n): URL;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin?: string | URL,\n options: ResolveUrlOptions = {},\n): URL | null {\n const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n\n if (!urlStr) {\n return originUrl || null;\n }\n\n urlStr = urlStr.trim();\n\n // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n let resolved: URL | undefined;\n try {\n resolved = new URL(urlStr);\n } catch {}\n const {allowProtocolRelative = false, allowOriginChange = true} = options;\n\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n }\n\n // We identify and throw on malformed absolute URLs (like double port).\n // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n if (!URL.canParse(urlStr, 'http://fake')) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_URL,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr,\n );\n }\n\n if (!originUrl) {\n return null;\n }\n\n // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n if (urlStr.startsWith('//')) {\n if (!allowProtocolRelative) {\n throw new RuntimeError(\n RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}`\n : urlStr,\n );\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n}\n\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr: string): never {\n throw new RuntimeError(\n RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`\n : urlStr,\n );\n}\n\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(\n resolved: URL,\n origin: URL,\n urlStr: string,\n allowOriginChange: boolean,\n): boolean {\n if (origin.origin === resolved.origin) {\n return true;\n }\n\n if (!allowOriginChange) {\n return false;\n }\n\n return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {resolveUrl} from './url';\n\n@Injectable()\n/**\n * @deprecated Use the HttpClient fetch backend instead. Intent to remove in Angular 23.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n 'XHR support in `@angular/platform-server` is deprecated and will be removed ' +\n 'in Angular 23. It has known security and performance issues in server ' +\n 'environments, such as forwarding `Authorization` headers on cross-origin ' +\n 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' +\n 'Please use the HttpClient fetch backend instead, which is the default since Angular 22.',\n );\n }\n\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new RuntimeError(\n RuntimeErrorCode.XHR_NOT_LOADED,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Unexpected state in ServerXhr: XHR implementation is not loaded.',\n );\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n // URLs with a schema should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n const parsedUrl = resolveUrl(request.url, baseUrl, {\n allowProtocolRelative: true,\n });\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\n },\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {resolveUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private readonly _doc = inject(DOCUMENT);\n private readonly origin = this._doc.location.origin;\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href, origin} = resolveUrl(\n config.url,\n this.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n this.origin = origin;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = resolveUrl(newUrl, this.origin, {\n allowOriginChange: false,\n });\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {resolveUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined\n ? resolveUrl(config.url, 'http://localhost').href\n : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["BrowserDomAdapter","setRootDomAdapter","RuntimeError","startMeasuring","stopMeasuring","HTTP_ROOT_INTERCEPTOR_FNS","getDOM","PLATFORM_SERVER_ID","TESTABILITY","NullViewportScroller","ɵsetDocument"],"mappings":"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"}
{"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs'; // 3p-only\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new RuntimeError(\n RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new RuntimeError(\n RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Disabled DOM emulation should only run in browser environments',\n );\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;\n\n/**\n * Options for {@link resolveUrl}.\n */\nexport interface ResolveUrlOptions {\n /**\n * Allow protocol-relative URLs (e.g. `//example.com`).\n * @default false\n */\n allowProtocolRelative?: boolean;\n /**\n * Allow origin changes.\n * @default true\n */\n allowOriginChange?: boolean;\n}\n\n/**\n * Resolves a URL string.\n *\n * If an origin is provided, the URL is resolved against it. Otherwise, the URL is parsed as-is.\n * @param urlStr The URL to resolve.\n * @param origin The origin to resolve the URL against.\n * @param options Options for resolving the URL.\n * @returns A resolved URL object.\n */\nexport function resolveUrl(urlStr: string | undefined): URL | null;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin: string | URL,\n options?: ResolveUrlOptions,\n): URL;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin?: string | URL,\n options: ResolveUrlOptions = {},\n): URL | null {\n const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n\n if (!urlStr) {\n return originUrl || null;\n }\n\n // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n let resolved: URL | undefined;\n try {\n resolved = new URL(urlStr);\n } catch {}\n const {allowProtocolRelative = false, allowOriginChange = true} = options;\n\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n }\n\n // We identify and throw on malformed absolute URLs (like double port).\n // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n if (!URL.canParse(urlStr, 'http://fake')) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_URL,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr,\n );\n }\n\n if (!originUrl) {\n return null;\n }\n\n // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n if (urlStr.startsWith('//')) {\n if (!allowProtocolRelative) {\n throw new RuntimeError(\n RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}`\n : urlStr,\n );\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n}\n\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr: string): never {\n throw new RuntimeError(\n RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`\n : urlStr,\n );\n}\n\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(\n resolved: URL,\n origin: URL,\n urlStr: string,\n allowOriginChange: boolean,\n): boolean {\n if (origin.origin === resolved.origin) {\n return true;\n }\n\n if (!allowOriginChange) {\n return false;\n }\n\n return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {resolveUrl} from './url';\n\n@Injectable()\n/**\n * @deprecated Use the HttpClient fetch backend instead. Intent to remove in Angular 23.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n 'XHR support in `@angular/platform-server` is deprecated and will be removed ' +\n 'in Angular 23. It has known security and performance issues in server ' +\n 'environments, such as forwarding `Authorization` headers on cross-origin ' +\n 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' +\n 'Please use the HttpClient fetch backend instead, which is the default since Angular 22.',\n );\n }\n\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new RuntimeError(\n RuntimeErrorCode.XHR_NOT_LOADED,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Unexpected state in ServerXhr: XHR implementation is not loaded.',\n );\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n // URLs with a schema should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n const parsedUrl = resolveUrl(request.url, baseUrl, {\n allowProtocolRelative: true,\n });\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\n },\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {resolveUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private readonly _doc = inject(DOCUMENT);\n private readonly origin = this._doc.location.origin;\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href, origin} = resolveUrl(\n config.url,\n this.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n this.origin = origin;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = resolveUrl(newUrl, this.origin, {\n allowOriginChange: false,\n });\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {resolveUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined\n ? resolveUrl(config.url, 'http://localhost').href\n : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["BrowserDomAdapter","setRootDomAdapter","RuntimeError","startMeasuring","stopMeasuring","HTTP_ROOT_INTERCEPTOR_FNS","getDOM","PLATFORM_SERVER_ID","TESTABILITY","NullViewportScroller","ɵsetDocument"],"mappings":"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"}
/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -4,0 +4,0 @@ * License: MIT

/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -229,5 +229,5 @@ * License: MIT

const VERSION = /* @__PURE__ */new Version('22.2.0-next.3');
const VERSION = /* @__PURE__ */new Version('22.2.0-next.4');
export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
//# sourceMappingURL=platform-server.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"platform-server.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../k8-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 ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {RuntimeErrorCode} from './errors';\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\nimport {resolveUrl} from './url';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string') {\n const parsedUrl = resolveUrl(url);\n if (parsedUrl !== null) {\n const hostname = parsedUrl.hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new RuntimeError(\n RuntimeErrorCode.HOST_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`\n : url,\n );\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.2.0-next.3');\n"],"names":["HTTP_FETCH_MAX_RESPONSE_SIZE","startMeasuring","stopMeasuring","IS_HYDRATION_DOM_REUSE_ENABLED","annotateForHydration","SSR_CONTENT_INTEGRITY_MARKER","INTERNAL_APPLICATION_ERROR_HANDLER","RuntimeError"],"mappings":"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"}
{"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 ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {BootstrapContext} from '@angular/platform-browser';\n\nimport {RuntimeErrorCode} from './errors';\nimport {platformServer} from './server';\nimport {PlatformState} from './platform_state';\nimport {BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {createScript} from './transfer_state';\nimport {resolveUrl} from './url';\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nexport const EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n\ninterface PlatformOptions extends Omit<PlatformConfig, 'document'> {\n document?: string | Document;\n platformProviders?: Provider[];\n}\n\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options: PlatformOptions): PlatformRef {\n const extraProviders = options.platformProviders ?? [];\n const measuringLabel = 'createServerPlatform';\n startMeasuring(measuringLabel);\n const {document, url} = options;\n\n const platform = platformServer([\n {\n provide: INITIAL_CONFIG,\n useValue: {\n document,\n url,\n },\n },\n extraProviders,\n ]);\n\n stopMeasuring(measuringLabel);\n return platform;\n}\n\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc: Document) {\n return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc: Document) {\n findEventDispatchScript(doc)?.remove();\n}\n\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState: PlatformState, applicationRef: ApplicationRef): void {\n const measuringLabel = 'prepareForHydration';\n startMeasuring(measuringLabel);\n const environmentInjector = applicationRef.injector;\n const doc = platformState.getDocument();\n\n if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n // Hydration is diabled, remove inlined event dispatch script.\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n\n return;\n }\n\n appendSsrContentIntegrityMarker(doc);\n\n const eventTypesToReplay = annotateForHydration(applicationRef, doc);\n if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n insertEventRecordScript(\n environmentInjector.get(APP_ID),\n doc,\n eventTypesToReplay,\n environmentInjector.get(CSP_NONCE, null),\n );\n } else {\n // No events to replay, we should remove inlined event dispatch script\n // (which was injected by the build process) from the HTML.\n removeEventDispatchScript(doc);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc: Document) {\n // Adding a ng hydration marker comment\n const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);\n doc.body.firstChild\n ? doc.body.insertBefore(comment, doc.body.firstChild)\n : doc.body.append(comment);\n}\n\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef: ApplicationRef) {\n const injector = applicationRef.injector;\n let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n applicationRef.components.forEach((componentRef) => {\n const renderer = componentRef.injector.get(Renderer2);\n const element = componentRef.location.nativeElement;\n if (element) {\n renderer.setAttribute(element, 'ng-server-context', serverContext);\n }\n });\n}\n\nfunction insertEventRecordScript(\n appId: string,\n doc: Document,\n eventTypesToReplay: {regular: Set<string>; capture: Set<string>},\n nonce: string | null,\n): void {\n const measuringLabel = 'insertEventRecordScript';\n startMeasuring(measuringLabel);\n const {regular, capture} = eventTypesToReplay;\n const eventDispatchScript = findEventDispatchScript(doc);\n\n // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n if (eventDispatchScript) {\n // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n const replayScriptContents =\n `window.__jsaction_bootstrap(` +\n `document.body,` +\n `\"${appId}\",` +\n `${JSON.stringify(Array.from(regular))},` +\n `${JSON.stringify(Array.from(capture))}` +\n `);`;\n\n const replayScript = createScript(doc, replayScriptContents, nonce);\n\n // Insert replay script right after inlined event dispatch script, since it\n // relies on `__jsaction_bootstrap` to be defined in the global scope.\n eventDispatchScript.after(replayScript);\n }\n stopMeasuring(measuringLabel);\n}\n\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nexport async function renderInternal(\n platformRef: PlatformRef,\n applicationRef: ApplicationRef,\n): Promise<string> {\n const platformState = platformRef.injector.get(PlatformState);\n prepareForHydration(platformState, applicationRef);\n appendServerContextInfo(applicationRef);\n\n // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n const environmentInjector = applicationRef.injector;\n const errorHandler = environmentInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n if (callbacks) {\n const asyncCallbacks: Promise<void>[] = [];\n for (const callback of callbacks) {\n try {\n const callbackResult = callback();\n if (callbackResult) {\n asyncCallbacks.push(callbackResult);\n }\n } catch (e) {\n // Delegate to the application's ErrorHandler so custom handlers\n // (e.g. Sentry) are notified, rather than writing directly to console.\n errorHandler(e);\n }\n }\n\n if (asyncCallbacks.length) {\n for (const result of await Promise.allSettled(asyncCallbacks)) {\n if (result.status === 'rejected') {\n errorHandler(result.reason);\n }\n }\n }\n }\n\n return platformState.renderToString();\n}\n\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef: PlatformRef): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n platformRef.destroy();\n resolve();\n }, 0);\n });\n}\n\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nexport const SERVER_CONTEXT = new InjectionToken<string>('SERVER_CONTEXT');\n\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext: string): string {\n const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `extraProviders` - set of platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nexport async function renderModule<T>(\n moduleType: Type<T>,\n options: {\n document?: string | Document;\n url?: string;\n extraProviders?: StaticProvider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const {document, url, extraProviders: platformProviders, allowedHosts} = options;\n validateAllowedHosts(url, allowedHosts);\n const platformRef = createServerPlatform({document, url, platformProviders});\n try {\n const moduleRef = await platformRef.bootstrapModule(moduleType);\n const applicationRef = moduleRef.injector.get(ApplicationRef);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n return await renderInternal(platformRef, applicationRef);\n } finally {\n await asyncDestroyPlatform(platformRef);\n }\n}\n\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n * bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n * instance once resolved. The method is invoked with an `Injector` instance that\n * provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n * - `document` - the document of the page to render, either as an HTML string or\n * as a reference to the `document` instance.\n * - `url` - the URL for the current render request.\n * - `platformProviders` - the platform level providers for the current render request.\n * - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nexport async function renderApplication(\n bootstrap: (context: BootstrapContext) => Promise<ApplicationRef>,\n options: {\n document?: string | Document;\n url?: string;\n platformProviders?: Provider[];\n allowedHosts?: Readonly<string>[];\n },\n): Promise<string> {\n const renderAppLabel = 'renderApplication';\n const bootstrapLabel = 'bootstrap';\n const _renderLabel = '_render';\n const {url, allowedHosts} = options;\n\n validateAllowedHosts(url, allowedHosts);\n\n startMeasuring(renderAppLabel);\n const platformRef = createServerPlatform(options);\n try {\n startMeasuring(bootstrapLabel);\n const applicationRef = await bootstrap({platformRef});\n stopMeasuring(bootstrapLabel);\n\n startMeasuring(_renderLabel);\n\n const measuringLabel = 'whenStable';\n startMeasuring(measuringLabel);\n // Block until application is stable.\n await applicationRef.whenStable();\n stopMeasuring(measuringLabel);\n\n const rendered = await renderInternal(platformRef, applicationRef);\n stopMeasuring(_renderLabel);\n return rendered;\n } finally {\n await asyncDestroyPlatform(platformRef);\n stopMeasuring(renderAppLabel);\n }\n}\n\nfunction validateAllowedHosts(url: string | undefined, allowedHosts: string[] | undefined) {\n if (typeof url === 'string') {\n const parsedUrl = resolveUrl(url);\n if (parsedUrl !== null) {\n const hostname = parsedUrl.hostname;\n const allowedHostsSet: ReadonlySet<string> = new Set(allowedHosts);\n if (!isHostAllowed(hostname, allowedHostsSet)) {\n throw new RuntimeError(\n RuntimeErrorCode.HOST_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.`\n : url,\n );\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.2.0-next.4');\n"],"names":["HTTP_FETCH_MAX_RESPONSE_SIZE","startMeasuring","stopMeasuring","IS_HYDRATION_DOM_REUSE_ENABLED","annotateForHydration","SSR_CONTENT_INTEGRITY_MARKER","INTERNAL_APPLICATION_ERROR_HANDLER","RuntimeError"],"mappings":"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"}
/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -22,3 +22,3 @@ * License: MIT

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -31,3 +31,3 @@ type: ServerTestingModule,

minVersion: "14.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -39,3 +39,3 @@ type: ServerTestingModule,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -49,3 +49,3 @@ type: ServerTestingModule,

minVersion: "12.0.0",
version: "22.2.0-next.3",
version: "22.2.0-next.4",
ngImport: i0,

@@ -52,0 +52,0 @@ type: ServerTestingModule,

@@ -1,1 +0,1 @@

{"version":3,"file":"testing.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/testing/src/server.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 {\n createPlatformFactory,\n NgModule,\n platformCore,\n PlatformRef,\n StaticProvider,\n} from '@angular/core';\nimport {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing';\nimport {\n ɵINTERNAL_SERVER_PLATFORM_PROVIDERS as INTERNAL_SERVER_PLATFORM_PROVIDERS,\n ɵSERVER_RENDER_PROVIDERS as SERVER_RENDER_PROVIDERS,\n} from '../../index';\n\nconst INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS: StaticProvider[] = [\n ...INTERNAL_SERVER_PLATFORM_PROVIDERS,\n];\n\n/**\n * Platform for testing\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\nexport const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef =\n createPlatformFactory(\n platformCore,\n 'serverTesting',\n INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS,\n );\n\n/**\n * NgModule for testing.\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\n@NgModule({\n exports: [BrowserDynamicTestingModule],\n providers: SERVER_RENDER_PROVIDERS,\n})\nexport class ServerTestingModule {}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,kDAAkD,GAAqB,CAC3E,GAAG,kCAAkC,CACtC;AAQM,MAAM,qBAAqB,GAChC,qBAAqB,CACnB,YAAY,EACZ,eAAe,EACf,kDAAkD;MAazC,mBAAmB,CAAA;;;;;UAAnB,mBAAmB;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAnB,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,mBAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,mBAAmB;cAHpB,2BAA2B;AAAA,GAAA,CAAA;;;;;UAG1B,mBAAmB;AAAA,IAAA,SAAA,EAFnB,uBAAuB;IAAA,OAAA,EAAA,CADxB,2BAA2B;AAAA,GAAA,CAAA;;;;;;QAG1B,mBAAmB;AAAA,EAAA,UAAA,EAAA,CAAA;UAJ/B,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;MACR,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACtC,MAAA,SAAS,EAAE;KACZ;;;;;;"}
{"version":3,"file":"testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/testing/src/server.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 {\n createPlatformFactory,\n NgModule,\n platformCore,\n PlatformRef,\n StaticProvider,\n} from '@angular/core';\nimport {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing';\nimport {\n ɵINTERNAL_SERVER_PLATFORM_PROVIDERS as INTERNAL_SERVER_PLATFORM_PROVIDERS,\n ɵSERVER_RENDER_PROVIDERS as SERVER_RENDER_PROVIDERS,\n} from '../../index';\n\nconst INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS: StaticProvider[] = [\n ...INTERNAL_SERVER_PLATFORM_PROVIDERS,\n];\n\n/**\n * Platform for testing\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\nexport const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef =\n createPlatformFactory(\n platformCore,\n 'serverTesting',\n INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS,\n );\n\n/**\n * NgModule for testing.\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\n@NgModule({\n exports: [BrowserDynamicTestingModule],\n providers: SERVER_RENDER_PROVIDERS,\n})\nexport class ServerTestingModule {}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,kDAAkD,GAAqB,CAC3E,GAAG,kCAAkC,CACtC;AAQM,MAAM,qBAAqB,GAChC,qBAAqB,CACnB,YAAY,EACZ,eAAe,EACf,kDAAkD;MAazC,mBAAmB,CAAA;;;;;UAAnB,mBAAmB;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAnB,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,mBAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,mBAAmB;cAHpB,2BAA2B;AAAA,GAAA,CAAA;;;;;UAG1B,mBAAmB;AAAA,IAAA,SAAA,EAFnB,uBAAuB;IAAA,OAAA,EAAA,CADxB,2BAA2B;AAAA,GAAA,CAAA;;;;;;QAG1B,mBAAmB;AAAA,EAAA,UAAA,EAAA,CAAA;UAJ/B,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;MACR,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACtC,MAAA,SAAS,EAAE;KACZ;;;;;;"}
{
"name": "@angular/platform-server",
"version": "22.2.0-next.3",
"version": "22.2.0-next.4",
"description": "Angular - library for using Angular in Node.js",

@@ -11,6 +11,6 @@ "author": "angular",

"peerDependencies": {
"@angular/common": "22.2.0-next.3",
"@angular/compiler": "22.2.0-next.3",
"@angular/core": "22.2.0-next.3",
"@angular/platform-browser": "22.2.0-next.3",
"@angular/common": "22.2.0-next.4",
"@angular/compiler": "22.2.0-next.4",
"@angular/core": "22.2.0-next.4",
"@angular/platform-browser": "22.2.0-next.4",
"rxjs": "^6.5.3 || ^7.4.0"

@@ -17,0 +17,0 @@ },

/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -4,0 +4,0 @@ * License: MIT

/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -4,0 +4,0 @@ * License: MIT

/**
* @license Angular v22.2.0-next.3
* @license Angular v22.2.0-next.4
* (c) 2010-2026 Google LLC. https://angular.dev/

@@ -4,0 +4,0 @@ * License: MIT

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display