@angular/platform-server 22.1.6 → 22.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.1.6
2
+ * @license Angular v22.1.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -109,7 +109,7 @@ class PlatformState {
109
109
  }
110
110
  static ɵfac = i0.ɵɵngDeclareFactory({
111
111
  minVersion: "12.0.0",
112
- version: "22.1.6",
112
+ version: "22.1.7",
113
113
  ngImport: i0,
114
114
  type: PlatformState,
115
115
  deps: [{
@@ -119,14 +119,14 @@ class PlatformState {
119
119
  });
120
120
  static ɵprov = i0.ɵɵngDeclareInjectable({
121
121
  minVersion: "12.0.0",
122
- version: "22.1.6",
122
+ version: "22.1.7",
123
123
  ngImport: i0,
124
124
  type: PlatformState
125
125
  });
126
126
  }
127
127
  i0.ɵɵngDeclareClassMetadata({
128
128
  minVersion: "12.0.0",
129
- version: "22.1.6",
129
+ version: "22.1.7",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -220,7 +220,7 @@ class ServerXhr {
220
220
  }
221
221
  static ɵfac = i0.ɵɵngDeclareFactory({
222
222
  minVersion: "12.0.0",
223
- version: "22.1.6",
223
+ version: "22.1.7",
224
224
  ngImport: i0,
225
225
  type: ServerXhr,
226
226
  deps: [],
@@ -228,14 +228,14 @@ class ServerXhr {
228
228
  });
229
229
  static ɵprov = i0.ɵɵngDeclareInjectable({
230
230
  minVersion: "12.0.0",
231
- version: "22.1.6",
231
+ version: "22.1.7",
232
232
  ngImport: i0,
233
233
  type: ServerXhr
234
234
  });
235
235
  }
236
236
  i0.ɵɵngDeclareClassMetadata({
237
237
  minVersion: "12.0.0",
238
- version: "22.1.6",
238
+ version: "22.1.7",
239
239
  ngImport: i0,
240
240
  type: ServerXhr,
241
241
  decorators: [{
@@ -377,7 +377,7 @@ class ServerPlatformLocation {
377
377
  }
378
378
  static ɵfac = i0.ɵɵngDeclareFactory({
379
379
  minVersion: "12.0.0",
380
- version: "22.1.6",
380
+ version: "22.1.7",
381
381
  ngImport: i0,
382
382
  type: ServerPlatformLocation,
383
383
  deps: [],
@@ -385,14 +385,14 @@ class ServerPlatformLocation {
385
385
  });
386
386
  static ɵprov = i0.ɵɵngDeclareInjectable({
387
387
  minVersion: "12.0.0",
388
- version: "22.1.6",
388
+ version: "22.1.7",
389
389
  ngImport: i0,
390
390
  type: ServerPlatformLocation
391
391
  });
392
392
  }
393
393
  i0.ɵɵngDeclareClassMetadata({
394
394
  minVersion: "12.0.0",
395
- version: "22.1.6",
395
+ version: "22.1.7",
396
396
  ngImport: i0,
397
397
  type: ServerPlatformLocation,
398
398
  decorators: [{
@@ -415,7 +415,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
415
415
  }
416
416
  static ɵfac = i0.ɵɵngDeclareFactory({
417
417
  minVersion: "12.0.0",
418
- version: "22.1.6",
418
+ version: "22.1.7",
419
419
  ngImport: i0,
420
420
  type: ServerEventManagerPlugin,
421
421
  deps: [{
@@ -425,14 +425,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
425
425
  });
426
426
  static ɵprov = i0.ɵɵngDeclareInjectable({
427
427
  minVersion: "12.0.0",
428
- version: "22.1.6",
428
+ version: "22.1.7",
429
429
  ngImport: i0,
430
430
  type: ServerEventManagerPlugin
431
431
  });
432
432
  }
433
433
  i0.ɵɵngDeclareClassMetadata({
434
434
  minVersion: "12.0.0",
435
- version: "22.1.6",
435
+ version: "22.1.7",
436
436
  ngImport: i0,
437
437
  type: ServerEventManagerPlugin,
438
438
  decorators: [{
@@ -542,7 +542,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
542
542
  class ServerModule {
543
543
  static ɵfac = i0.ɵɵngDeclareFactory({
544
544
  minVersion: "12.0.0",
545
- version: "22.1.6",
545
+ version: "22.1.7",
546
546
  ngImport: i0,
547
547
  type: ServerModule,
548
548
  deps: [],
@@ -550,14 +550,14 @@ class ServerModule {
550
550
  });
551
551
  static ɵmod = i0.ɵɵngDeclareNgModule({
552
552
  minVersion: "14.0.0",
553
- version: "22.1.6",
553
+ version: "22.1.7",
554
554
  ngImport: i0,
555
555
  type: ServerModule,
556
556
  exports: [BrowserModule]
557
557
  });
558
558
  static ɵinj = i0.ɵɵngDeclareInjector({
559
559
  minVersion: "12.0.0",
560
- version: "22.1.6",
560
+ version: "22.1.7",
561
561
  ngImport: i0,
562
562
  type: ServerModule,
563
563
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -566,7 +566,7 @@ class ServerModule {
566
566
  }
567
567
  i0.ɵɵngDeclareClassMetadata({
568
568
  minVersion: "12.0.0",
569
- version: "22.1.6",
569
+ version: "22.1.7",
570
570
  ngImport: i0,
571
571
  type: ServerModule,
572
572
  decorators: [{
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.1.6
2
+ * @license Angular v22.1.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.1.6
2
+ * @license Angular v22.1.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -226,7 +226,7 @@ function isHostAllowed(hostname, allowedHosts) {
226
226
  return false;
227
227
  }
228
228
 
229
- const VERSION = /* @__PURE__ */new Version('22.1.6');
229
+ const VERSION = /* @__PURE__ */new Version('22.1.7');
230
230
 
231
231
  export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };
232
232
  //# sourceMappingURL=platform-server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {ɵ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.6');\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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"}
1
+ {"version":3,"file":"platform-server.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/provide_server.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/src/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nimport {ɵHTTP_FETCH_MAX_RESPONSE_SIZE as HTTP_FETCH_MAX_RESPONSE_SIZE} from '@angular/common/http';\nimport {PLATFORM_SERVER_PROVIDERS} from './server';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @param options An object to configure the server providers. Currently supports the following options:\n * - `maxResponseBodySize`: The maximum allowed response body size when using the Fetch API.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nexport function provideServerRendering(options?: {\n maxResponseBodySize: number;\n}): EnvironmentProviders {\n if (typeof ngServerMode === 'undefined') {\n globalThis['ngServerMode'] = true;\n }\n\n const providers = [...PLATFORM_SERVER_PROVIDERS];\n if (options?.maxResponseBodySize) {\n providers.push({provide: HTTP_FETCH_MAX_RESPONSE_SIZE, useValue: options.maxResponseBodySize});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n APP_ID,\n ApplicationRef,\n CSP_NONCE,\n InjectionToken,\n PlatformRef,\n Provider,\n Renderer2,\n StaticProvider,\n Type,\n ɵannotateForHydration as annotateForHydration,\n ɵINTERNAL_APPLICATION_ERROR_HANDLER as INTERNAL_APPLICATION_ERROR_HANDLER,\n ɵIS_HYDRATION_DOM_REUSE_ENABLED as IS_HYDRATION_DOM_REUSE_ENABLED,\n ɵSSR_CONTENT_INTEGRITY_MARKER as SSR_CONTENT_INTEGRITY_MARKER,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵ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.7');\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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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.1.6
2
+ * @license Angular v22.1.7
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -19,7 +19,7 @@ const platformServerTesting = createPlatformFactory(platformCore, 'serverTesting
19
19
  class ServerTestingModule {
20
20
  static ɵfac = i0.ɵɵngDeclareFactory({
21
21
  minVersion: "12.0.0",
22
- version: "22.1.6",
22
+ version: "22.1.7",
23
23
  ngImport: i0,
24
24
  type: ServerTestingModule,
25
25
  deps: [],
@@ -27,14 +27,14 @@ class ServerTestingModule {
27
27
  });
28
28
  static ɵmod = i0.ɵɵngDeclareNgModule({
29
29
  minVersion: "14.0.0",
30
- version: "22.1.6",
30
+ version: "22.1.7",
31
31
  ngImport: i0,
32
32
  type: ServerTestingModule,
33
33
  exports: [BrowserDynamicTestingModule]
34
34
  });
35
35
  static ɵinj = i0.ɵɵngDeclareInjector({
36
36
  minVersion: "12.0.0",
37
- version: "22.1.6",
37
+ version: "22.1.7",
38
38
  ngImport: i0,
39
39
  type: ServerTestingModule,
40
40
  providers: SERVER_RENDER_PROVIDERS,
@@ -43,7 +43,7 @@ class ServerTestingModule {
43
43
  }
44
44
  i0.ɵɵngDeclareClassMetadata({
45
45
  minVersion: "12.0.0",
46
- version: "22.1.6",
46
+ version: "22.1.7",
47
47
  ngImport: i0,
48
48
  type: ServerTestingModule,
49
49
  decorators: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/platform-server",
3
- "version": "22.1.6",
3
+ "version": "22.1.7",
4
4
  "description": "Angular - library for using Angular in Node.js",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -8,10 +8,10 @@
8
8
  "node": "^22.22.3 || ^24.15.0 || >=26.0.0"
9
9
  },
10
10
  "peerDependencies": {
11
- "@angular/common": "22.1.6",
12
- "@angular/compiler": "22.1.6",
13
- "@angular/core": "22.1.6",
14
- "@angular/platform-browser": "22.1.6",
11
+ "@angular/common": "22.1.7",
12
+ "@angular/compiler": "22.1.7",
13
+ "@angular/core": "22.1.7",
14
+ "@angular/platform-browser": "22.1.7",
15
15
  "rxjs": "^6.5.3 || ^7.4.0"
16
16
  },
17
17
  "dependencies": {
@@ -758,6 +758,18 @@ function requireNodeUtils () {
758
758
  NOFRAMES: true
759
759
  };
760
760
 
761
+ // HTML's *escapable raw text* elements (a.k.a. RCDATA). Unlike the raw-text
762
+ // elements above, their text content IS escaped for character references --
763
+ // but the element is still terminated only by its own closing tag. So any
764
+ // payload that we emit verbatim underneath one of them (comment data,
765
+ // processing-instruction data, or the serialization of a nested raw-content
766
+ // element) must have that closing tag escaped, or it breaks the element open.
767
+ // https://html.spec.whatwg.org/multipage/syntax.html#escapable-raw-text-elements
768
+ var hasEscapableRawContent = {
769
+ TEXTAREA: true,
770
+ TITLE: true
771
+ };
772
+
761
773
  var emptyElements = {
762
774
  area: true,
763
775
  base: true,
@@ -779,14 +791,6 @@ function requireNodeUtils () {
779
791
  wbr: true
780
792
  };
781
793
 
782
- var extraNewLine = {
783
- /* Removed in https://github.com/whatwg/html/issues/944
784
- pre: true,
785
- textarea: true,
786
- listing: true
787
- */
788
- };
789
-
790
794
  const ESCAPE_REGEXP = /[&<>\u00A0]/g;
791
795
  const ESCAPE_ATTR_REGEXP = /[&"<>\u00A0]/g;
792
796
 
@@ -848,12 +852,22 @@ function requireNodeUtils () {
848
852
  return a.name;
849
853
  }
850
854
 
855
+ function serializedTagName(node) {
856
+ var ns = node.namespaceURI;
857
+ return (ns === NAMESPACE.HTML || ns === NAMESPACE.SVG || ns === NAMESPACE.MATHML)
858
+ ? node.localName
859
+ : node.tagName;
860
+ }
861
+
851
862
  function fallbackRawContentTags(node) {
852
863
  const tags = [];
853
864
  while (node) {
854
865
  if (node.nodeType === 1 /*ELEMENT_NODE*/) {
855
- if (node.namespaceURI === NAMESPACE.HTML && hasRawContentFallback[node.tagName]) {
856
- tags.push(node.localName);
866
+ const tagname = serializedTagName(node);
867
+ if (tagname &&
868
+ (hasRawContentFallback[tagname.toUpperCase()] ||
869
+ hasEscapableRawContent[tagname.toUpperCase()])) {
870
+ tags.push(tagname);
857
871
  }
858
872
  node = node.parentNode;
859
873
  } else if (node.nodeType === 11 /*DOCUMENT_FRAGMENT_NODE*/ && node._host) {
@@ -996,7 +1010,7 @@ function requireNodeUtils () {
996
1010
  case 1: //ELEMENT_NODE
997
1011
  var ns = kid.namespaceURI;
998
1012
  var html = ns === NAMESPACE.HTML;
999
- var tagname = (html || ns === NAMESPACE.SVG || ns === NAMESPACE.MATHML) ? kid.localName : kid.tagName;
1013
+ var tagname = serializedTagName(kid);
1000
1014
 
1001
1015
  s += '<' + tagname;
1002
1016
 
@@ -1019,7 +1033,6 @@ function requireNodeUtils () {
1019
1033
  ss = escapeMatchingClosingTag(ss, fallbackTag);
1020
1034
  }
1021
1035
  }
1022
- if (html && extraNewLine[tagname] && ss.charAt(0)==='\n') s += '\n';
1023
1036
  // Serialize children and add end tag for all others
1024
1037
  s += ss;
1025
1038
  s += '</' + tagname + '>';
@@ -11437,6 +11450,8 @@ function requireHTMLParser () {
11437
11450
  for(var i = 0, n = oldattrs.length; i < n; i++) {
11438
11451
  var oldname = oldattrs[i][0];
11439
11452
  var oldval = oldattrs[i][1];
11453
+ // Bare attributes have an empty string value in the DOM.
11454
+ if (oldval === undefined) oldval = "";
11440
11455
  if (!newelt.hasAttribute(oldname)) return false;
11441
11456
  if (newelt.getAttribute(oldname) !== oldval) return false;
11442
11457
  }