UNPKG

@angular/platform-server

Version:

Angular - library for using Angular in Node.js

1 lines 42.2 kB
{"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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"}