@angular/platform-server 22.1.3 → 22.1.5
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.
- package/fesm2022/_server-chunk.mjs +26 -24
- package/fesm2022/_server-chunk.mjs.map +1 -1
- package/fesm2022/init.mjs +1 -1
- package/fesm2022/platform-server.mjs +2 -2
- package/fesm2022/platform-server.mjs.map +1 -1
- package/fesm2022/testing.mjs +5 -5
- package/fesm2022/testing.mjs.map +1 -1
- package/package.json +5 -5
- package/third_party/domino/bundled-domino.mjs +56 -10
- package/third_party/domino/bundled-domino.mjs.map +1 -1
- package/types/init.d.ts +1 -1
- package/types/platform-server.d.ts +1 -1
- package/types/testing.d.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v22.1.
|
|
2
|
+
* @license Angular v22.1.5
|
|
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.
|
|
112
|
+
version: "22.1.5",
|
|
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.
|
|
122
|
+
version: "22.1.5",
|
|
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.
|
|
129
|
+
version: "22.1.5",
|
|
130
130
|
ngImport: i0,
|
|
131
131
|
type: PlatformState,
|
|
132
132
|
decorators: [{
|
|
@@ -144,17 +144,19 @@ function enableDomEmulation(injector) {
|
|
|
144
144
|
return injector.get(ENABLE_DOM_EMULATION, true);
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
const
|
|
147
|
+
const HTTP_OR_HTTPS_PROTOCOL_REGEXP = /^https?:/i;
|
|
148
|
+
const HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP = /^https?:(?![/\\]{2})/i;
|
|
148
149
|
function resolveUrl(urlStr, origin, options = {}) {
|
|
149
150
|
const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;
|
|
150
151
|
if (!urlStr) {
|
|
151
152
|
return originUrl || null;
|
|
152
153
|
}
|
|
153
|
-
urlStr = urlStr.trim();
|
|
154
154
|
let resolved;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
if (!originUrl || !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(urlStr)) {
|
|
156
|
+
try {
|
|
157
|
+
resolved = new URL(urlStr);
|
|
158
|
+
} catch {}
|
|
159
|
+
}
|
|
158
160
|
const {
|
|
159
161
|
allowProtocolRelative = false,
|
|
160
162
|
allowOriginChange = true
|
|
@@ -193,7 +195,7 @@ function isSafeOriginChange(resolved, origin, urlStr, allowOriginChange) {
|
|
|
193
195
|
if (!allowOriginChange) {
|
|
194
196
|
return false;
|
|
195
197
|
}
|
|
196
|
-
return
|
|
198
|
+
return HTTP_OR_HTTPS_PROTOCOL_REGEXP.test(urlStr) && !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(urlStr);
|
|
197
199
|
}
|
|
198
200
|
|
|
199
201
|
class ServerXhr {
|
|
@@ -218,7 +220,7 @@ class ServerXhr {
|
|
|
218
220
|
}
|
|
219
221
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
220
222
|
minVersion: "12.0.0",
|
|
221
|
-
version: "22.1.
|
|
223
|
+
version: "22.1.5",
|
|
222
224
|
ngImport: i0,
|
|
223
225
|
type: ServerXhr,
|
|
224
226
|
deps: [],
|
|
@@ -226,14 +228,14 @@ class ServerXhr {
|
|
|
226
228
|
});
|
|
227
229
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
228
230
|
minVersion: "12.0.0",
|
|
229
|
-
version: "22.1.
|
|
231
|
+
version: "22.1.5",
|
|
230
232
|
ngImport: i0,
|
|
231
233
|
type: ServerXhr
|
|
232
234
|
});
|
|
233
235
|
}
|
|
234
236
|
i0.ɵɵngDeclareClassMetadata({
|
|
235
237
|
minVersion: "12.0.0",
|
|
236
|
-
version: "22.1.
|
|
238
|
+
version: "22.1.5",
|
|
237
239
|
ngImport: i0,
|
|
238
240
|
type: ServerXhr,
|
|
239
241
|
decorators: [{
|
|
@@ -243,7 +245,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
243
245
|
const URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\-.]*:)/;
|
|
244
246
|
function relativeUrlsTransformerInterceptorFn(request, next) {
|
|
245
247
|
const trimmedUrl = request.url.trim();
|
|
246
|
-
if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {
|
|
248
|
+
if (URL_SCHEMA_REGEXP.test(trimmedUrl) && !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(trimmedUrl)) {
|
|
247
249
|
return next(request);
|
|
248
250
|
}
|
|
249
251
|
const platformLocation = inject(PlatformLocation);
|
|
@@ -375,7 +377,7 @@ class ServerPlatformLocation {
|
|
|
375
377
|
}
|
|
376
378
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
377
379
|
minVersion: "12.0.0",
|
|
378
|
-
version: "22.1.
|
|
380
|
+
version: "22.1.5",
|
|
379
381
|
ngImport: i0,
|
|
380
382
|
type: ServerPlatformLocation,
|
|
381
383
|
deps: [],
|
|
@@ -383,14 +385,14 @@ class ServerPlatformLocation {
|
|
|
383
385
|
});
|
|
384
386
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
385
387
|
minVersion: "12.0.0",
|
|
386
|
-
version: "22.1.
|
|
388
|
+
version: "22.1.5",
|
|
387
389
|
ngImport: i0,
|
|
388
390
|
type: ServerPlatformLocation
|
|
389
391
|
});
|
|
390
392
|
}
|
|
391
393
|
i0.ɵɵngDeclareClassMetadata({
|
|
392
394
|
minVersion: "12.0.0",
|
|
393
|
-
version: "22.1.
|
|
395
|
+
version: "22.1.5",
|
|
394
396
|
ngImport: i0,
|
|
395
397
|
type: ServerPlatformLocation,
|
|
396
398
|
decorators: [{
|
|
@@ -413,7 +415,7 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
|
|
|
413
415
|
}
|
|
414
416
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
415
417
|
minVersion: "12.0.0",
|
|
416
|
-
version: "22.1.
|
|
418
|
+
version: "22.1.5",
|
|
417
419
|
ngImport: i0,
|
|
418
420
|
type: ServerEventManagerPlugin,
|
|
419
421
|
deps: [{
|
|
@@ -423,14 +425,14 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
|
|
|
423
425
|
});
|
|
424
426
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
425
427
|
minVersion: "12.0.0",
|
|
426
|
-
version: "22.1.
|
|
428
|
+
version: "22.1.5",
|
|
427
429
|
ngImport: i0,
|
|
428
430
|
type: ServerEventManagerPlugin
|
|
429
431
|
});
|
|
430
432
|
}
|
|
431
433
|
i0.ɵɵngDeclareClassMetadata({
|
|
432
434
|
minVersion: "12.0.0",
|
|
433
|
-
version: "22.1.
|
|
435
|
+
version: "22.1.5",
|
|
434
436
|
ngImport: i0,
|
|
435
437
|
type: ServerEventManagerPlugin,
|
|
436
438
|
decorators: [{
|
|
@@ -540,7 +542,7 @@ const PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVE
|
|
|
540
542
|
class ServerModule {
|
|
541
543
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
542
544
|
minVersion: "12.0.0",
|
|
543
|
-
version: "22.1.
|
|
545
|
+
version: "22.1.5",
|
|
544
546
|
ngImport: i0,
|
|
545
547
|
type: ServerModule,
|
|
546
548
|
deps: [],
|
|
@@ -548,14 +550,14 @@ class ServerModule {
|
|
|
548
550
|
});
|
|
549
551
|
static ɵmod = i0.ɵɵngDeclareNgModule({
|
|
550
552
|
minVersion: "14.0.0",
|
|
551
|
-
version: "22.1.
|
|
553
|
+
version: "22.1.5",
|
|
552
554
|
ngImport: i0,
|
|
553
555
|
type: ServerModule,
|
|
554
556
|
exports: [BrowserModule]
|
|
555
557
|
});
|
|
556
558
|
static ɵinj = i0.ɵɵngDeclareInjector({
|
|
557
559
|
minVersion: "12.0.0",
|
|
558
|
-
version: "22.1.
|
|
560
|
+
version: "22.1.5",
|
|
559
561
|
ngImport: i0,
|
|
560
562
|
type: ServerModule,
|
|
561
563
|
providers: PLATFORM_SERVER_PROVIDERS,
|
|
@@ -564,7 +566,7 @@ class ServerModule {
|
|
|
564
566
|
}
|
|
565
567
|
i0.ɵɵngDeclareClassMetadata({
|
|
566
568
|
minVersion: "12.0.0",
|
|
567
|
-
version: "22.1.
|
|
569
|
+
version: "22.1.5",
|
|
568
570
|
ngImport: i0,
|
|
569
571
|
type: ServerModule,
|
|
570
572
|
decorators: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs'; // 3p-only\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new RuntimeError(\n RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new RuntimeError(\n RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Disabled DOM emulation should only run in browser environments',\n );\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;\n\n/**\n * Options for {@link resolveUrl}.\n */\nexport interface ResolveUrlOptions {\n /**\n * Allow protocol-relative URLs (e.g. `//example.com`).\n * @default false\n */\n allowProtocolRelative?: boolean;\n /**\n * Allow origin changes.\n * @default true\n */\n allowOriginChange?: boolean;\n}\n\n/**\n * Resolves a URL string.\n *\n * If an origin is provided, the URL is resolved against it. Otherwise, the URL is parsed as-is.\n * @param urlStr The URL to resolve.\n * @param origin The origin to resolve the URL against.\n * @param options Options for resolving the URL.\n * @returns A resolved URL object.\n */\nexport function resolveUrl(urlStr: string | undefined): URL | null;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin: string | URL,\n options?: ResolveUrlOptions,\n): URL;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin?: string | URL,\n options: ResolveUrlOptions = {},\n): URL | null {\n const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n\n if (!urlStr) {\n return originUrl || null;\n }\n\n urlStr = urlStr.trim();\n\n // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n let resolved: URL | undefined;\n try {\n resolved = new URL(urlStr);\n } catch {}\n const {allowProtocolRelative = false, allowOriginChange = true} = options;\n\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n }\n\n // We identify and throw on malformed absolute URLs (like double port).\n // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n if (!URL.canParse(urlStr, 'http://fake')) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_URL,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr,\n );\n }\n\n if (!originUrl) {\n return null;\n }\n\n // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n if (urlStr.startsWith('//')) {\n if (!allowProtocolRelative) {\n throw new RuntimeError(\n RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}`\n : urlStr,\n );\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n}\n\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr: string): never {\n throw new RuntimeError(\n RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`\n : urlStr,\n );\n}\n\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(\n resolved: URL,\n origin: URL,\n urlStr: string,\n allowOriginChange: boolean,\n): boolean {\n if (origin.origin === resolved.origin) {\n return true;\n }\n\n if (!allowOriginChange) {\n return false;\n }\n\n return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {resolveUrl} from './url';\n\n@Injectable()\n/**\n * @deprecated Use the HttpClient fetch backend instead. Intent to remove in Angular 23.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n 'XHR support in `@angular/platform-server` is deprecated and will be removed ' +\n 'in Angular 23. It has known security and performance issues in server ' +\n 'environments, such as forwarding `Authorization` headers on cross-origin ' +\n 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' +\n 'Please use the HttpClient fetch backend instead, which is the default since Angular 22.',\n );\n }\n\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new RuntimeError(\n RuntimeErrorCode.XHR_NOT_LOADED,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Unexpected state in ServerXhr: XHR implementation is not loaded.',\n );\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n // URLs with a schema should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n const parsedUrl = resolveUrl(request.url, baseUrl, {\n allowProtocolRelative: true,\n });\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\n },\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {resolveUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private readonly _doc = inject(DOCUMENT);\n private readonly origin = this._doc.location.origin;\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href, origin} = resolveUrl(\n config.url,\n this.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n this.origin = origin;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = resolveUrl(newUrl, this.origin, {\n allowOriginChange: false,\n });\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {resolveUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined\n ? resolveUrl(config.url, 'http://localhost').href\n : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["BrowserDomAdapter","setRootDomAdapter","RuntimeError","startMeasuring","stopMeasuring","HTTP_ROOT_INTERCEPTOR_FNS","getDOM","PLATFORM_SERVER_ID","TESTABILITY","NullViewportScroller","ɵsetDocument"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_server-chunk.mjs","sources":[".../third_party/domino/bundled-domino.mjs'; // 3p-only\n\nexport function setDomTypes() {\n // Make all Domino types available in the global env.\n // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n Object.assign(globalThis, domino.impl);\n (globalThis as any)['KeyboardEvent'] = domino.impl.Event;\n}\n\n/**\n * Parses a document string to a Document object.\n */\nexport function parseDocument(html: string, url = '/') {\n let window = domino.createWindow(html, url);\n let doc = window.document;\n return doc;\n}\n\n/**\n * Serializes a document to string.\n */\nexport function serializeDocument(doc: Document): string {\n return (doc as any).serialize();\n}\n\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nexport class DominoAdapter extends BrowserDomAdapter {\n static override makeCurrent() {\n setDomTypes();\n setRootDomAdapter(new DominoAdapter());\n }\n\n override readonly supportsDOMEvents = false;\n private static defaultDoc: Document;\n\n override createHtmlDocument(): Document {\n return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n }\n\n override getDefaultDocument(): Document {\n if (!DominoAdapter.defaultDoc) {\n DominoAdapter.defaultDoc = domino.createDocument();\n }\n return DominoAdapter.defaultDoc;\n }\n\n override isElementNode(node: any): boolean {\n return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n }\n override isShadowRoot(node: any): boolean {\n return node.shadowRoot == node;\n }\n\n /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n override getGlobalEventTarget(doc: Document, target: string): EventTarget | null {\n if (target === 'window') {\n return doc.defaultView;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n\n override getBaseHref(doc: Document): string {\n const length = doc.head.children.length;\n\n // The `<base>` can only be a direct child of `<head>` so we can save some\n // execution time by looking through them directly instead of querying for it.\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n // Note that we can't cache the `href` value itself, because this method gets called with a\n // different document every time which means that in theory the value can be different too.\n for (let i = 0; i < length; i++) {\n const child = doc.head.children[i];\n\n // Tag names are always uppercase for HTML nodes.\n if (child.tagName === 'BASE') {\n // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n return child.getAttribute('href') || '';\n }\n }\n\n return '';\n }\n\n override dispatchEvent(el: Node, evt: any) {\n el.dispatchEvent(evt);\n\n // Dispatch the event to the window also.\n const doc = el.ownerDocument || el;\n const win = (doc as any).defaultView;\n if (win) {\n win.dispatchEvent(evt);\n }\n }\n\n override getUserAgent(): string {\n return 'Fake user agent';\n }\n\n override getCookie(name: string): string {\n throw new RuntimeError(\n RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Config object passed to initialize the platform.\n *\n * @publicApi\n */\nexport interface PlatformConfig {\n /**\n * The initial DOM to use to bootstrap the server application.\n * @default create a new DOM using Domino\n */\n document?: string;\n /**\n * The URL for the current application state. This is used for initializing\n * the platform's location. `protocol`, `hostname`, and `port`.\n */\n url?: string;\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nexport const INITIAL_CONFIG = new InjectionToken<PlatformConfig>('Server.INITIAL_CONFIG');\n\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nexport const BEFORE_APP_SERIALIZED = new InjectionToken<ReadonlyArray<() => void | Promise<void>>>(\n 'Server.RENDER_MODULE_HOOK',\n);\n\nexport const ENABLE_DOM_EMULATION = new InjectionToken<boolean>('ENABLE_DOM_EMULATION');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n inject,\n Inject,\n Injectable,\n Injector,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {serializeDocument} from './domino_adapter';\nimport {ENABLE_DOM_EMULATION} from './tokens';\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\n@Injectable()\nexport class PlatformState {\n /* @internal */\n _enableDomEmulation = enableDomEmulation(inject(Injector));\n\n constructor(@Inject(DOCUMENT) private _doc: any) {}\n\n /**\n * Renders the current state of the platform to string.\n */\n renderToString(): string {\n if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n throw new RuntimeError(\n RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Disabled DOM emulation should only run in browser environments',\n );\n }\n\n const measuringLabel = 'renderToString';\n startMeasuring(measuringLabel);\n const rendered = this._enableDomEmulation\n ? serializeDocument(this._doc)\n : // In the case we run/test the platform-server in a browser environment\n this._doc.documentElement.outerHTML;\n stopMeasuring(measuringLabel);\n return rendered;\n }\n\n /**\n * Returns the current DOM state.\n */\n getDocument(): any {\n return this._doc;\n }\n}\n\nexport function enableDomEmulation(injector: Injector): boolean {\n return injector.get(ENABLE_DOM_EMULATION, true);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEXP = /^https?:/i;\n\n/**\n * Matches an HTTP or HTTPS URL that does not have an authority (i.e. missing `//` or `\\\\`).\n * In the WHATWG standard, when resolved against a base of the same scheme, these URLs are relative.\n * @internal\n */\nexport const HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP = /^https?:(?![/\\\\]{2})/i;\n\n/**\n * Options for {@link resolveUrl}.\n */\nexport interface ResolveUrlOptions {\n /**\n * Allow protocol-relative URLs (e.g. `//example.com`).\n * @default false\n */\n allowProtocolRelative?: boolean;\n /**\n * Allow origin changes.\n * @default true\n */\n allowOriginChange?: boolean;\n}\n\n/**\n * Resolves a URL string.\n *\n * If an origin is provided, the URL is resolved against it. Otherwise, the URL is parsed as-is.\n * @param urlStr The URL to resolve.\n * @param origin The origin to resolve the URL against.\n * @param options Options for resolving the URL.\n * @returns A resolved URL object.\n */\nexport function resolveUrl(urlStr: string | undefined): URL | null;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin: string | URL,\n options?: ResolveUrlOptions,\n): URL;\nexport function resolveUrl(\n urlStr: string | undefined,\n origin?: string | URL,\n options: ResolveUrlOptions = {},\n): URL | null {\n const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n\n if (!urlStr) {\n return originUrl || null;\n }\n\n // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n // URLs with no authority (e.g. `http:/path` or `http:path`) must be resolved against the origin when one is provided.\n let resolved: URL | undefined;\n if (!originUrl || !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(urlStr)) {\n try {\n resolved = new URL(urlStr);\n } catch {}\n }\n const {allowProtocolRelative = false, allowOriginChange = true} = options;\n\n if (resolved) {\n if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n }\n\n // We identify and throw on malformed absolute URLs (like double port).\n // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n if (!URL.canParse(urlStr, 'http://fake')) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_URL,\n typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr,\n );\n }\n\n if (!originUrl) {\n return null;\n }\n\n // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n if (urlStr.startsWith('//')) {\n if (!allowProtocolRelative) {\n throw new RuntimeError(\n RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}`\n : urlStr,\n );\n }\n\n return new URL(urlStr, origin);\n }\n\n resolved = new URL(urlStr, origin);\n\n if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n throwSuspiciousUrlError(urlStr);\n }\n\n return resolved;\n}\n\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr: string): never {\n throw new RuntimeError(\n RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.`\n : urlStr,\n );\n}\n\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(\n resolved: URL,\n origin: URL,\n urlStr: string,\n allowOriginChange: boolean,\n): boolean {\n if (origin.origin === resolved.origin) {\n return true;\n }\n\n if (!allowOriginChange) {\n return false;\n }\n\n return (\n HTTP_OR_HTTPS_PROTOCOL_REGEXP.test(urlStr) && !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(urlStr)\n );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {PlatformLocation, XhrFactory} from '@angular/common';\nimport {\n ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport {inject, Injectable, Provider, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP, resolveUrl} from './url';\n\n@Injectable()\n/**\n * @deprecated Use the HttpClient fetch backend instead. Intent to remove in Angular 23.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nexport class ServerXhr implements XhrFactory {\n private xhrImpl: typeof import('xhr2') | undefined;\n\n // The `xhr2` dependency has a side-effect of accessing and modifying a\n // global scope. Loading `xhr2` dynamically allows us to delay the loading\n // and start the process once the global scope is established by the underlying\n // server platform (via shims, etc).\n private async ɵloadImpl(): Promise<void> {\n if (!this.xhrImpl) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n 'XHR support in `@angular/platform-server` is deprecated and will be removed ' +\n 'in Angular 23. It has known security and performance issues in server ' +\n 'environments, such as forwarding `Authorization` headers on cross-origin ' +\n 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' +\n 'Please use the HttpClient fetch backend instead, which is the default since Angular 22.',\n );\n }\n\n const {default: xhr} = await import('xhr2');\n this.xhrImpl = xhr;\n }\n }\n\n build(): XMLHttpRequest {\n const impl = this.xhrImpl;\n if (!impl) {\n throw new RuntimeError(\n RuntimeErrorCode.XHR_NOT_LOADED,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Unexpected state in ServerXhr: XHR implementation is not loaded.',\n );\n }\n\n return new impl.XMLHttpRequest();\n }\n}\n\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\n\nfunction relativeUrlsTransformerInterceptorFn(\n request: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const trimmedUrl = request.url.trim();\n if (URL_SCHEMA_REGEXP.test(trimmedUrl) && !HTTP_OR_HTTPS_NO_AUTHORITY_REGEXP.test(trimmedUrl)) {\n // URLs with a schema (and an authority for http(s)) should be left unchanged.\n return next(request);\n }\n\n const platformLocation = inject(PlatformLocation);\n const {href, protocol, hostname, port} = platformLocation;\n if (!protocol.startsWith('http')) {\n return next(request);\n }\n\n let urlPrefix = `${protocol}//${hostname}`;\n if (port) {\n urlPrefix += `:${port}`;\n }\n\n const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n const baseUrl = new URL(baseHref, urlPrefix);\n\n const parsedUrl = resolveUrl(request.url, baseUrl, {\n allowProtocolRelative: true,\n });\n\n return next(request.clone({url: parsedUrl.toString()}));\n}\n\nexport const SERVER_HTTP_PROVIDERS: Provider[] = [\n {provide: XhrFactory, useClass: ServerXhr},\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: relativeUrlsTransformerInterceptorFn,\n multi: true,\n },\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n ɵgetDOM as getDOM,\n} from '@angular/common';\nimport {inject, Injectable, ɵWritable as Writable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {INITIAL_CONFIG} from './tokens';\nimport {resolveUrl} from './url';\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\n@Injectable()\nexport class ServerPlatformLocation implements PlatformLocation {\n public readonly href: string = '/';\n public readonly hostname: string = '/';\n public readonly protocol: string = '/';\n public readonly port: string = '/';\n public readonly pathname: string = '/';\n public readonly search: string = '';\n public readonly hash: string = '';\n private _hashUpdate = new Subject<LocationChangeEvent>();\n private readonly _doc = inject(DOCUMENT);\n private readonly origin = this._doc.location.origin;\n\n constructor() {\n const config = inject(INITIAL_CONFIG, {optional: true});\n if (!config) {\n return;\n }\n if (config.url) {\n const {protocol, hostname, port, pathname, search, hash, href, origin} = resolveUrl(\n config.url,\n this.origin,\n );\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n this.pathname = pathname;\n this.search = search;\n this.hash = hash;\n this.href = href;\n this.origin = origin;\n }\n }\n\n getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n return () => {};\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this._hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n get url(): string {\n return `${this.pathname}${this.search}${this.hash}`;\n }\n\n private setHash(value: string, oldUrl: string) {\n if (this.hash === value) {\n // Don't fire events if the hash has not changed.\n return;\n }\n (this as Writable<this>).hash = value;\n const newUrl = this.url;\n queueMicrotask(() =>\n this._hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl,\n } as LocationChangeEvent),\n );\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const oldUrl = this.url;\n const {pathname, search, hash, href, protocol} = resolveUrl(newUrl, this.origin, {\n allowOriginChange: false,\n });\n const writableThis = this as Writable<this>;\n writableThis.pathname = pathname;\n writableThis.search = search;\n writableThis.href = href;\n writableThis.protocol = protocol;\n this.setHash(hash, oldUrl);\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n this.replaceState(state, title, newUrl);\n }\n\n forward(): void {\n throw new Error('Not implemented');\n }\n\n back(): void {\n throw new Error('Not implemented');\n }\n\n // History API isn't available on server, therefore return undefined\n getState(): unknown {\n return undefined;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, ɵgetDOM as getDOM} from '@angular/common';\nimport {Inject, Injectable, type ListenerOptions} from '@angular/core';\nimport {EventManagerPlugin} from '@angular/platform-browser';\n\n@Injectable()\nexport class ServerEventManagerPlugin extends EventManagerPlugin {\n constructor(@Inject(DOCUMENT) private doc: any) {\n super(doc);\n }\n\n // Handle all events on the server.\n override supports(eventName: string) {\n return true;\n }\n\n override addEventListener(\n element: HTMLElement,\n eventName: string,\n handler: Function,\n options?: ListenerOptions,\n ): Function {\n return getDOM().onAndCancel(element, eventName, handler, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {\n APP_ID,\n inject,\n InjectionToken,\n Injector,\n Provider,\n TransferState,\n ɵstartMeasuring as startMeasuring,\n ɵstopMeasuring as stopMeasuring,\n} from '@angular/core';\n\nimport {BEFORE_APP_SERIALIZED} from './tokens';\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = new InjectionToken<{serialized: boolean}>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '',\n {\n factory: () => ({serialized: false}),\n },\n);\n\nexport const TRANSFER_STATE_SERIALIZATION_PROVIDERS: Provider[] = [\n {\n provide: BEFORE_APP_SERIALIZED,\n useFactory: serializeTransferStateFactory,\n multi: true,\n },\n];\n\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nexport function createScript(\n doc: Document,\n textContent: string,\n nonce: string | null,\n): HTMLScriptElement {\n const script = doc.createElement('script');\n script.textContent = textContent;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n\n return script;\n}\n\nfunction warnIfStateTransferHappened(injector: Injector): void {\n const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n\n if (transferStateStatus.serialized) {\n console.warn(\n `Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` +\n `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` +\n ` imports: [ServerModule], // Registers server providers\\n` +\n ` providers: [provideServerRendering()] // Also registers server providers\\n\\n` +\n `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`,\n );\n }\n\n transferStateStatus.serialized = true;\n}\n\nfunction serializeTransferStateFactory() {\n const doc = inject(DOCUMENT);\n const appId = inject(APP_ID);\n const transferStore = inject(TransferState);\n const injector = inject(Injector);\n\n return () => {\n const measuringLabel = 'serializeTransferStateFactory';\n startMeasuring(measuringLabel);\n // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n // These callbacks can be used to provide the value for a given key.\n const content = transferStore.toJson();\n\n if (transferStore.isEmpty) {\n // The state is empty, nothing to transfer,\n // avoid creating an extra `<script>` tag in this case.\n return;\n }\n\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n warnIfStateTransferHappened(injector);\n }\n\n const script = createScript(\n doc,\n content,\n /**\n * `nonce` is not required for 'application/json'\n * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n */\n null,\n );\n script.id = appId + '-state';\n script.setAttribute('type', 'application/json');\n\n // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n // bundles are always `type=\"module\"`. These are deferred by default and cause the\n // transfer data to be queried only after the browser has finished parsing the DOM.\n doc.body.appendChild(script);\n stopMeasuring(measuringLabel);\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n DOCUMENT,\n PlatformLocation,\n ViewportScroller,\n ɵgetDOM as getDOM,\n ɵNullViewportScroller as NullViewportScroller,\n ɵPLATFORM_SERVER_ID as PLATFORM_SERVER_ID,\n} from '@angular/common';\nimport {\n createPlatformFactory,\n Injector,\n NgModule,\n PLATFORM_ID,\n PLATFORM_INITIALIZER,\n platformCore,\n PlatformRef,\n Provider,\n Testability,\n ɵsetDocument,\n ɵTESTABILITY as TESTABILITY,\n inject,\n StaticProvider,\n} from '@angular/core';\nimport {\n BrowserModule,\n EVENT_MANAGER_PLUGINS,\n ɵBrowserDomAdapter as BrowserDomAdapter,\n} from '@angular/platform-browser';\n\nimport {DominoAdapter, parseDocument} from './domino_adapter';\nimport {SERVER_HTTP_PROVIDERS} from './http';\nimport {resolveUrl} from './url';\nimport {ServerPlatformLocation} from './location';\nimport {enableDomEmulation, PlatformState} from './platform_state';\nimport {ServerEventManagerPlugin} from './server_events';\nimport {INITIAL_CONFIG, PlatformConfig} from './tokens';\nimport {TRANSFER_STATE_SERIALIZATION_PROVIDERS} from './transfer_state';\n\nexport const INTERNAL_SERVER_PLATFORM_PROVIDERS: StaticProvider[] = [\n {provide: DOCUMENT, useFactory: _document},\n {provide: PLATFORM_ID, useValue: PLATFORM_SERVER_ID},\n {provide: PLATFORM_INITIALIZER, useFactory: initDominoAdapter, multi: true},\n {\n provide: PlatformLocation,\n useClass: ServerPlatformLocation,\n deps: [],\n },\n {provide: PlatformState, deps: [DOCUMENT]},\n];\n\nfunction initDominoAdapter() {\n const injector = inject(Injector);\n const _enableDomEmulation = enableDomEmulation(injector);\n return () => {\n if (_enableDomEmulation) {\n DominoAdapter.makeCurrent();\n } else {\n BrowserDomAdapter.makeCurrent();\n }\n };\n}\n\nexport const SERVER_RENDER_PROVIDERS: Provider[] = [\n {provide: EVENT_MANAGER_PLUGINS, multi: true, useClass: ServerEventManagerPlugin},\n];\n\nexport const PLATFORM_SERVER_PROVIDERS: Provider[] = [\n TRANSFER_STATE_SERIALIZATION_PROVIDERS,\n SERVER_RENDER_PROVIDERS,\n SERVER_HTTP_PROVIDERS,\n {provide: Testability, useValue: null}, // Keep for backwards-compatibility.\n {provide: TESTABILITY, useValue: null},\n {provide: ViewportScroller, useClass: NullViewportScroller},\n];\n\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\n@NgModule({\n exports: [BrowserModule],\n providers: PLATFORM_SERVER_PROVIDERS,\n})\nexport class ServerModule {}\n\nfunction _document() {\n const injector = inject(Injector);\n const config: PlatformConfig | null = injector.get(INITIAL_CONFIG, null);\n const _enableDomEmulation = enableDomEmulation(injector);\n let document: Document;\n if (config && config.document) {\n document =\n typeof config.document === 'string'\n ? _enableDomEmulation\n ? parseDocument(\n config.document,\n config.url !== undefined\n ? resolveUrl(config.url, 'http://localhost').href\n : undefined,\n )\n : window.document\n : config.document;\n } else {\n document = getDOM().createHtmlDocument();\n }\n // Tell ivy about the global document\n ɵsetDocument(document);\n return document;\n}\n\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nexport function platformServer(extraProviders?: StaticProvider[] | undefined): PlatformRef {\n const noServerModeSet = typeof ngServerMode === 'undefined';\n if (noServerModeSet) {\n globalThis['ngServerMode'] = true;\n }\n\n const platform = createPlatformFactory(\n platformCore,\n 'server',\n INTERNAL_SERVER_PLATFORM_PROVIDERS,\n )(extraProviders);\n\n if (noServerModeSet) {\n platform.onDestroy(() => {\n globalThis['ngServerMode'] = undefined;\n });\n }\n\n return platform;\n}\n"],"names":["BrowserDomAdapter","setRootDomAdapter","RuntimeError","startMeasuring","stopMeasuring","HTTP_ROOT_INTERCEPTOR_FNS","getDOM","PLATFORM_SERVER_ID","TESTABILITY","NullViewportScroller","ɵsetDocument"],"mappings":"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"}
|
package/fesm2022/init.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v22.1.
|
|
2
|
+
* @license Angular v22.1.5
|
|
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.
|
|
229
|
+
const VERSION = /* @__PURE__ */new Version('22.1.5');
|
|
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.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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"}
|
|
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.5');\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":";;;;;;;;;;;;;;;AA+BM,SAAU,sBAAsB,CAAC,OAEtC,EAAA;AACC,EAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,IAAA,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;AACnC,EAAA;AAEA,EAAA,MAAM,SAAS,GAAG,CAAC,GAAG,yBAAyB,CAAC;EAChD,IAAI,OAAO,EAAE,mBAAmB,EAAE;IAChC,SAAS,CAAC,IAAI,CAAC;AAAC,MAAA,OAAO,EAAEA,6BAA4B;MAAE,QAAQ,EAAE,OAAO,CAAC;AAAmB,KAAC,CAAC;AAChG,EAAA;EAEA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACDO,MAAM,wBAAwB,GAAG,4BAA4B;AAWpE,SAAS,oBAAoB,CAAC,OAAwB,EAAA;AACpD,EAAA,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,IAAI,EAAE;EACtD,MAAM,cAAc,GAAG,sBAAsB;EAC7CC,eAAc,CAAC,cAAc,CAAC;EAC9B,MAAM;IAAC,QAAQ;AAAE,IAAA;AAAG,GAAC,GAAG,OAAO;AAE/B,EAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,CAC9B;AACE,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,QAAQ,EAAE;MACR,QAAQ;AACR,MAAA;AACD;GACF,EACD,cAAc,CACf,CAAC;EAEFC,cAAa,CAAC,cAAc,CAAC;AAC7B,EAAA,OAAO,QAAQ;AACjB;AAMA,SAAS,uBAAuB,CAAC,GAAa,EAAA;AAC5C,EAAA,OAAO,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC;AACrD;AAMA,SAAS,yBAAyB,CAAC,GAAa,EAAA;AAC9C,EAAA,uBAAuB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE;AACxC;AAKA,SAAS,mBAAmB,CAAC,aAA4B,EAAE,cAA8B,EAAA;EACvF,MAAM,cAAc,GAAG,qBAAqB;EAC5CD,eAAc,CAAC,cAAc,CAAC;AAC9B,EAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,QAAQ;AACnD,EAAA,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE;EAEvC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAACE,+BAA8B,EAAE,KAAK,CAAC,EAAE;IAGnE,yBAAyB,CAAC,GAAG,CAAC;AAE9B,IAAA;AACF,EAAA;EAEA,+BAA+B,CAAC,GAAG,CAAC;AAEpC,EAAA,MAAM,kBAAkB,GAAGC,qBAAoB,CAAC,cAAc,EAAE,GAAG,CAAC;EACpE,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE;IACtE,uBAAuB,CACrB,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAC/B,GAAG,EACH,kBAAkB,EAClB,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CACzC;AACH,EAAA,CAAA,MAAO;IAGL,yBAAyB,CAAC,GAAG,CAAC;AAChC,EAAA;EACAF,cAAa,CAAC,cAAc,CAAC;AAC/B;AAQA,SAAS,+BAA+B,CAAC,GAAa,EAAA;AAEpD,EAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAACG,6BAA4B,CAAC;EAC/D,GAAG,CAAC,IAAI,CAAC,UAAA,GACL,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAA,GAClD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9B;AAMA,SAAS,uBAAuB,CAAC,cAA8B,EAAA;AAC7D,EAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ;AACxC,EAAA,IAAI,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;AAC/F,EAAA,cAAc,CAAC,UAAU,CAAC,OAAO,CAAE,YAAY,IAAI;IACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACrD,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa;AACnD,IAAA,IAAI,OAAO,EAAE;MACX,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,aAAa,CAAC;AACpE,IAAA;AACF,EAAA,CAAC,CAAC;AACJ;AAEA,SAAS,uBAAuB,CAC9B,KAAa,EACb,GAAa,EACb,kBAAgE,EAChE,KAAoB,EAAA;EAEpB,MAAM,cAAc,GAAG,yBAAyB;EAChDJ,eAAc,CAAC,cAAc,CAAC;EAC9B,MAAM;IAAC,OAAO;AAAE,IAAA;AAAO,GAAC,GAAG,kBAAkB;AAC7C,EAAA,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,GAAG,CAAC;AAGxD,EAAA,IAAI,mBAAmB,EAAE;AAEvB,IAAA,MAAM,oBAAoB,GACxB,CAAA,4BAAA,CAA8B,GAC9B,CAAA,cAAA,CAAgB,GAChB,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,CAAI,GACb,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA,CAAA,CAAG,GACzC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA,CAAE,GACxC,CAAA,EAAA,CAAI;IAEN,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,CAAC;AAInE,IAAA,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;AACzC,EAAA;EACAC,cAAa,CAAC,cAAc,CAAC;AAC/B;AAWO,eAAe,cAAc,CAClC,WAAwB,EACxB,cAA8B,EAAA;EAE9B,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7D,EAAA,mBAAmB,CAAC,aAAa,EAAE,cAAc,CAAC;EAClD,uBAAuB,CAAC,cAAc,CAAC;AAGvC,EAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,QAAQ;AACnD,EAAA,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAACI,mCAAkC,CAAC;EAChF,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;AACtE,EAAA,IAAI,SAAS,EAAE;IACb,MAAM,cAAc,GAAoB,EAAE;AAC1C,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;MAChC,IAAI;AACF,QAAA,MAAM,cAAc,GAAG,QAAQ,EAAE;AACjC,QAAA,IAAI,cAAc,EAAE;AAClB,UAAA,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,QAAA;MACF,CAAA,CAAE,OAAO,CAAC,EAAE;QAGV,YAAY,CAAC,CAAC,CAAC;AACjB,MAAA;AACF,IAAA;IAEA,IAAI,cAAc,CAAC,MAAM,EAAE;MACzB,KAAK,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AAC7D,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AAChC,UAAA,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,aAAa,CAAC,cAAc,EAAE;AACvC;AAMA,SAAS,oBAAoB,CAAC,WAAwB,EAAA;AACpD,EAAA,OAAO,IAAI,OAAO,CAAQ,OAAO,IAAI;AACnC,IAAA,UAAU,CAAC,MAAK;MACd,WAAW,CAAC,OAAO,EAAE;AACrB,MAAA,OAAO,EAAE;IACX,CAAC,EAAE,CAAC,CAAC;AACP,EAAA,CAAC,CAAC;AACJ;AAKA,MAAM,sBAAsB,GAAG,OAAO;MAOzB,cAAc,GAAG,IAAI,cAAc,CAAS,gBAAgB;AAOzE,SAAS,qBAAqB,CAAC,aAAqB,EAAA;EAClD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;EAC5D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,sBAAsB;AAC9D;AAcO,eAAe,YAAY,CAChC,UAAmB,EACnB,OAKC,EAAA;EAED,MAAM;IAAC,QAAQ;IAAE,GAAG;AAAE,IAAA,cAAc,EAAE,iBAAiB;AAAE,IAAA;AAAY,GAAC,GAAG,OAAO;AAChF,EAAA,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC;EACvC,MAAM,WAAW,GAAG,oBAAoB,CAAC;IAAC,QAAQ;IAAE,GAAG;AAAE,IAAA;AAAiB,GAAC,CAAC;EAC5E,IAAI;IACF,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC;IAC/D,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;IAE7D,MAAM,cAAc,GAAG,YAAY;IACnCL,eAAc,CAAC,cAAc,CAAC;AAE9B,IAAA,MAAM,cAAc,CAAC,UAAU,EAAE;IACjCC,cAAa,CAAC,cAAc,CAAC;AAE7B,IAAA,OAAO,MAAM,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC;AAC1D,EAAA,CAAA,SAAU;IACR,MAAM,oBAAoB,CAAC,WAAW,CAAC;AACzC,EAAA;AACF;AAiCO,eAAe,iBAAiB,CACrC,SAAiE,EACjE,OAKC,EAAA;EAED,MAAM,cAAc,GAAG,mBAAmB;EAC1C,MAAM,cAAc,GAAG,WAAW;EAClC,MAAM,YAAY,GAAG,SAAS;EAC9B,MAAM;IAAC,GAAG;AAAE,IAAA;AAAY,GAAC,GAAG,OAAO;AAEnC,EAAA,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC;EAEvCD,eAAc,CAAC,cAAc,CAAC;AAC9B,EAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC;EACjD,IAAI;IACFA,eAAc,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC;AAAC,MAAA;AAAW,KAAC,CAAC;IACrDC,cAAa,CAAC,cAAc,CAAC;IAE7BD,eAAc,CAAC,YAAY,CAAC;IAE5B,MAAM,cAAc,GAAG,YAAY;IACnCA,eAAc,CAAC,cAAc,CAAC;AAE9B,IAAA,MAAM,cAAc,CAAC,UAAU,EAAE;IACjCC,cAAa,CAAC,cAAc,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC;IAClEA,cAAa,CAAC,YAAY,CAAC;AAC3B,IAAA,OAAO,QAAQ;AACjB,EAAA,CAAA,SAAU;IACR,MAAM,oBAAoB,CAAC,WAAW,CAAC;IACvCA,cAAa,CAAC,cAAc,CAAC;AAC/B,EAAA;AACF;AAEA,SAAS,oBAAoB,CAAC,GAAuB,EAAE,YAAkC,EAAA;AACvF,EAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;IACjC,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,MAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ;AACnC,MAAA,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,YAAY,CAAC;AAClE,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AAC7C,QAAA,MAAM,IAAIK,aAAY,CAAA,IAAA,EAEpB,OAAO,SAAS,KAAK,WAAW,IAAI,SAAA,GAChC,CAAA,KAAA,EAAQ,GAAG,CAAA,2DAAA,CAAA,GACX,GAAG,CACR;AACH,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAUM,SAAU,aAAa,CAAC,QAAgB,EAAE,YAAiC,EAAA;AAC/E,EAAA,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACvD,IAAA,OAAO,IAAI;AACb,EAAA;AAEA,EAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,IAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACjC,MAAA;AACF,IAAA;AAEA,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7B,MAAA,OAAO,IAAI;AACb,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,KAAK;AACd;;ACrZO,MAAM,OAAO,kBAAmB,IAAI,OAAO,CAAC,mBAAmB;;;;"}
|
package/fesm2022/testing.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v22.1.
|
|
2
|
+
* @license Angular v22.1.5
|
|
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.
|
|
22
|
+
version: "22.1.5",
|
|
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.
|
|
30
|
+
version: "22.1.5",
|
|
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.
|
|
37
|
+
version: "22.1.5",
|
|
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.
|
|
46
|
+
version: "22.1.5",
|
|
47
47
|
ngImport: i0,
|
|
48
48
|
type: ServerTestingModule,
|
|
49
49
|
decorators: [{
|
package/fesm2022/testing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.mjs","sources":["../../../../../
|
|
1
|
+
{"version":3,"file":"testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/platform-server/testing/src/server.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n createPlatformFactory,\n NgModule,\n platformCore,\n PlatformRef,\n StaticProvider,\n} from '@angular/core';\nimport {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing';\nimport {\n ɵINTERNAL_SERVER_PLATFORM_PROVIDERS as INTERNAL_SERVER_PLATFORM_PROVIDERS,\n ɵSERVER_RENDER_PROVIDERS as SERVER_RENDER_PROVIDERS,\n} from '../../index';\n\nconst INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS: StaticProvider[] = [\n ...INTERNAL_SERVER_PLATFORM_PROVIDERS,\n];\n\n/**\n * Platform for testing\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\nexport const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef =\n createPlatformFactory(\n platformCore,\n 'serverTesting',\n INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS,\n );\n\n/**\n * NgModule for testing.\n *\n * @publicApi\n * @deprecated from v20.0.0, use e2e testing to verify SSR behavior.\n */\n@NgModule({\n exports: [BrowserDynamicTestingModule],\n providers: SERVER_RENDER_PROVIDERS,\n})\nexport class ServerTestingModule {}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,kDAAkD,GAAqB,CAC3E,GAAG,kCAAkC,CACtC;AAQM,MAAM,qBAAqB,GAChC,qBAAqB,CACnB,YAAY,EACZ,eAAe,EACf,kDAAkD;MAazC,mBAAmB,CAAA;;;;;UAAnB,mBAAmB;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAnB,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,mBAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,mBAAmB;cAHpB,2BAA2B;AAAA,GAAA,CAAA;;;;;UAG1B,mBAAmB;AAAA,IAAA,SAAA,EAFnB,uBAAuB;IAAA,OAAA,EAAA,CADxB,2BAA2B;AAAA,GAAA,CAAA;;;;;;QAG1B,mBAAmB;AAAA,EAAA,UAAA,EAAA,CAAA;UAJ/B,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;MACR,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACtC,MAAA,SAAS,EAAE;KACZ;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/platform-server",
|
|
3
|
-
"version": "22.1.
|
|
3
|
+
"version": "22.1.5",
|
|
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.
|
|
12
|
-
"@angular/compiler": "22.1.
|
|
13
|
-
"@angular/core": "22.1.
|
|
14
|
-
"@angular/platform-browser": "22.1.
|
|
11
|
+
"@angular/common": "22.1.5",
|
|
12
|
+
"@angular/compiler": "22.1.5",
|
|
13
|
+
"@angular/core": "22.1.5",
|
|
14
|
+
"@angular/platform-browser": "22.1.5",
|
|
15
15
|
"rxjs": "^6.5.3 || ^7.4.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|