{"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.1.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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"}