@angular/platform-server 22.1.1 → 22.2.0-next.0

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.1
2
+ * @license Angular v22.2.0-next.0
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.1",
112
+ version: "22.2.0-next.0",
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.1",
122
+ version: "22.2.0-next.0",
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.1",
129
+ version: "22.2.0-next.0",
130
130
  ngImport: i0,
131
131
  type: PlatformState,
132
132
  decorators: [{
@@ -218,7 +218,7 @@ class ServerXhr {
218
218
  }
219
219
  static ɵfac = i0.ɵɵngDeclareFactory({
220
220
  minVersion: "12.0.0",
221
- version: "22.1.1",
221
+ version: "22.2.0-next.0",
222
222
  ngImport: i0,
223
223
  type: ServerXhr,
224
224
  deps: [],
@@ -226,14 +226,14 @@ class ServerXhr {
226
226
  });
227
227
  static ɵprov = i0.ɵɵngDeclareInjectable({
228
228
  minVersion: "12.0.0",
229
- version: "22.1.1",
229
+ version: "22.2.0-next.0",
230
230
  ngImport: i0,
231
231
  type: ServerXhr
232
232
  });
233
233
  }
234
234
  i0.ɵɵngDeclareClassMetadata({
235
235
  minVersion: "12.0.0",
236
- version: "22.1.1",
236
+ version: "22.2.0-next.0",
237
237
  ngImport: i0,
238
238
  type: ServerXhr,
239
239
  decorators: [{
@@ -375,7 +375,7 @@ class ServerPlatformLocation {
375
375
  }
376
376
  static ɵfac = i0.ɵɵngDeclareFactory({
377
377
  minVersion: "12.0.0",
378
- version: "22.1.1",
378
+ version: "22.2.0-next.0",
379
379
  ngImport: i0,
380
380
  type: ServerPlatformLocation,
381
381
  deps: [],
@@ -383,14 +383,14 @@ class ServerPlatformLocation {
383
383
  });
384
384
  static ɵprov = i0.ɵɵngDeclareInjectable({
385
385
  minVersion: "12.0.0",
386
- version: "22.1.1",
386
+ version: "22.2.0-next.0",
387
387
  ngImport: i0,
388
388
  type: ServerPlatformLocation
389
389
  });
390
390
  }
391
391
  i0.ɵɵngDeclareClassMetadata({
392
392
  minVersion: "12.0.0",
393
- version: "22.1.1",
393
+ version: "22.2.0-next.0",
394
394
  ngImport: i0,
395
395
  type: ServerPlatformLocation,
396
396
  decorators: [{
@@ -413,7 +413,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
413
413
  }
414
414
  static ɵfac = i0.ɵɵngDeclareFactory({
415
415
  minVersion: "12.0.0",
416
- version: "22.1.1",
416
+ version: "22.2.0-next.0",
417
417
  ngImport: i0,
418
418
  type: ServerEventManagerPlugin,
419
419
  deps: [{
@@ -423,14 +423,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
423
423
  });
424
424
  static ɵprov = i0.ɵɵngDeclareInjectable({
425
425
  minVersion: "12.0.0",
426
- version: "22.1.1",
426
+ version: "22.2.0-next.0",
427
427
  ngImport: i0,
428
428
  type: ServerEventManagerPlugin
429
429
  });
430
430
  }
431
431
  i0.ɵɵngDeclareClassMetadata({
432
432
  minVersion: "12.0.0",
433
- version: "22.1.1",
433
+ version: "22.2.0-next.0",
434
434
  ngImport: i0,
435
435
  type: ServerEventManagerPlugin,
436
436
  decorators: [{
@@ -540,7 +540,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
540
540
  class ServerModule {
541
541
  static ɵfac = i0.ɵɵngDeclareFactory({
542
542
  minVersion: "12.0.0",
543
- version: "22.1.1",
543
+ version: "22.2.0-next.0",
544
544
  ngImport: i0,
545
545
  type: ServerModule,
546
546
  deps: [],
@@ -548,14 +548,14 @@ class ServerModule {
548
548
  });
549
549
  static ɵmod = i0.ɵɵngDeclareNgModule({
550
550
  minVersion: "14.0.0",
551
- version: "22.1.1",
551
+ version: "22.2.0-next.0",
552
552
  ngImport: i0,
553
553
  type: ServerModule,
554
554
  exports: [BrowserModule]
555
555
  });
556
556
  static ɵinj = i0.ɵɵngDeclareInjector({
557
557
  minVersion: "12.0.0",
558
- version: "22.1.1",
558
+ version: "22.2.0-next.0",
559
559
  ngImport: i0,
560
560
  type: ServerModule,
561
561
  providers: PLATFORM_SERVER_PROVIDERS,
@@ -564,7 +564,7 @@ class ServerModule {
564
564
  }
565
565
  i0.ɵɵngDeclareClassMetadata({
566
566
  minVersion: "12.0.0",
567
- version: "22.1.1",
567
+ version: "22.2.0-next.0",
568
568
  ngImport: i0,
569
569
  type: ServerModule,
570
570
  decorators: [{
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v22.1.1
2
+ * @license Angular v22.2.0-next.0
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.1
2
+ * @license Angular v22.2.0-next.0
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.1');
229
+ const VERSION = /* @__PURE__ */new Version('22.2.0-next.0');
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":["../../../../../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.1');\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":["../../../../../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.0');\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.1
2
+ * @license Angular v22.2.0-next.0
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.1",
22
+ version: "22.2.0-next.0",
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.1",
30
+ version: "22.2.0-next.0",
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.1",
37
+ version: "22.2.0-next.0",
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.1",
46
+ version: "22.2.0-next.0",
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.1",
3
+ "version": "22.2.0-next.0",
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.1",
12
- "@angular/compiler": "22.1.1",
13
- "@angular/core": "22.1.1",
14
- "@angular/platform-browser": "22.1.1",
11
+ "@angular/common": "22.2.0-next.0",
12
+ "@angular/compiler": "22.2.0-next.0",
13
+ "@angular/core": "22.2.0-next.0",
14
+ "@angular/platform-browser": "22.2.0-next.0",
15
15
  "rxjs": "^6.5.3 || ^7.4.0"
16
16
  },
17
17
  "dependencies": {
@@ -848,17 +848,6 @@ function requireNodeUtils () {
848
848
  return a.name;
849
849
  }
850
850
 
851
- function fallbackRawContentTags(node) {
852
- const tags = [];
853
- while (node?.nodeType === 1 /*ELEMENT_NODE*/) {
854
- if (node.namespaceURI === NAMESPACE.HTML && hasRawContentFallback[node.tagName]) {
855
- tags.push(node.localName);
856
- }
857
- node = node.parentNode;
858
- }
859
- return tags;
860
- }
861
-
862
851
  /**
863
852
  * Escapes matching closing tag in a raw text.
864
853
  *
@@ -888,22 +877,12 @@ function requireNodeUtils () {
888
877
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
889
878
  }
890
879
 
891
- function escapeMatchingClosingTags(rawText, parentTag, ancestorTags) {
892
- let result = escapeMatchingClosingTag(rawText, parentTag);
893
- if (ancestorTags) {
894
- for (const ancestorTag of ancestorTags) {
895
- result = escapeMatchingClosingTag(result, ancestorTag);
896
- }
897
- }
898
- return result;
899
- }
900
-
901
- function escapeFallbackRawText(rawText, parentTag, ancestorTags) {
902
- let result = '';
903
- let index = 0;
880
+ function escapeFallbackRawText(rawText, parentTag) {
881
+ var result = '';
882
+ var index = 0;
904
883
 
905
884
  while (index < rawText.length) {
906
- const commentStart = rawText.indexOf('<!--', index);
885
+ var commentStart = rawText.indexOf('<!--', index);
907
886
  if (commentStart === -1) {
908
887
  result += escape(rawText.slice(index));
909
888
  break;
@@ -911,15 +890,15 @@ function requireNodeUtils () {
911
890
 
912
891
  result += escape(rawText.slice(index, commentStart));
913
892
 
914
- const commentEnd = findCommentEnd(rawText, commentStart + 4);
893
+ var commentEnd = findCommentEnd(rawText, commentStart + 4);
915
894
  if (commentEnd === -1) {
916
- result += escapeMatchingClosingTags(rawText.slice(commentStart), parentTag, ancestorTags);
895
+ result += escapeMatchingClosingTag(rawText.slice(commentStart), parentTag);
917
896
  break;
918
897
  }
919
898
 
920
899
  // A complete HTML comment remains inert if downstream tooling reparses
921
900
  // fallback raw text as normal HTML, so preserve its comment semantics.
922
- result += escapeMatchingClosingTags(rawText.slice(commentStart, commentEnd), parentTag, ancestorTags);
901
+ result += escapeMatchingClosingTag(rawText.slice(commentStart, commentEnd), parentTag);
923
902
  index = commentEnd;
924
903
  }
925
904
 
@@ -932,7 +911,7 @@ function requireNodeUtils () {
932
911
  if (rawText.charAt(index) === '-' && rawText.charAt(index + 1) === '>')
933
912
  return index + 2;
934
913
 
935
- const match = CLOSING_COMMENT_REGEXP.exec(rawText.slice(index));
914
+ var match = CLOSING_COMMENT_REGEXP.exec(rawText.slice(index));
936
915
  return match ? index + match.index + match[0].length : -1;
937
916
  }
938
917
 
@@ -983,12 +962,8 @@ function requireNodeUtils () {
983
962
  // If an element can have raw content, this content may
984
963
  // potentially require escaping to avoid XSS.
985
964
  var upperTag = tagname.toUpperCase();
986
- if (hasRawContent[upperTag] && !hasRawContentFallback[upperTag] && ss.includes('</')) {
965
+ if (hasRawContent[upperTag] && !hasRawContentFallback[upperTag]) {
987
966
  ss = escapeMatchingClosingTag(ss, tagname);
988
- const fallbackTags = fallbackRawContentTags(parent);
989
- for (const fallbackTag of fallbackTags) {
990
- ss = escapeMatchingClosingTag(ss, fallbackTag);
991
- }
992
967
  }
993
968
  if (html && extraNewLine[tagname] && ss.charAt(0)==='\n') s += '\n';
994
969
  // Serialize children and add end tag for all others
@@ -1008,27 +983,22 @@ function requireNodeUtils () {
1008
983
  if (hasRawContent[parenttag]) {
1009
984
  // Preserve actual child element markup in fallback elements such as
1010
985
  // <noscript>, but do not emit text-node payloads as raw HTML.
1011
- s += hasRawContentFallback[parenttag] ? escapeFallbackRawText(kid.data, parent.localName, fallbackRawContentTags(parent.parentNode)) : kid.data;
986
+ s += hasRawContentFallback[parenttag] ? escapeFallbackRawText(kid.data, parent.localName) : kid.data;
1012
987
  } else {
1013
988
  s += escape(kid.data);
1014
989
  }
1015
990
  break;
1016
991
  case 8: //COMMENT_NODE
1017
- let commentData = escapeClosingCommentTag(kid.data);
1018
- if (commentData.includes('</')) {
1019
- const fallbackTags = fallbackRawContentTags(parent);
1020
- for (const fallbackTag of fallbackTags) {
1021
- commentData = escapeMatchingClosingTag(commentData, fallbackTag);
1022
- }
1023
- }
1024
- s += '<!--' + commentData + '-->';
992
+ s += '<!--' + escapeClosingCommentTag(kid.data) + '-->';
1025
993
  break;
1026
994
  case 7: //PROCESSING_INSTRUCTION_NODE
1027
995
  const content = escapeProcessingInstructionContent(kid.data);
1028
996
  s += '<?' + kid.target + ' ' + content + '?>';
1029
997
  break;
1030
998
  case 10: //DOCUMENT_TYPE_NODE
1031
- s += '<!DOCTYPE ' + kid.name + '>';
999
+ s += '<!DOCTYPE ' + kid.name;
1000
+
1001
+ s += '>';
1032
1002
  break;
1033
1003
  default:
1034
1004
  utils.InvalidStateError();
@@ -7618,7 +7588,7 @@ function requireHtmlelts () {
7618
7588
  required: Boolean,
7619
7589
  readOnly: Boolean,
7620
7590
  checked: Boolean,
7621
- value: { type: String, treatNullAsEmptyString: true },
7591
+ value: String,
7622
7592
  src: URL,
7623
7593
  defaultChecked: {name: 'checked', type: Boolean},
7624
7594
  size: {type: 'unsigned long', default: 20, min: 1, setmin: 1},