@angular/common 21.2.0 → 22.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"http.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/resource.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/transfer_cache.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 Injector,\n Signal,\n ɵResourceImpl as ResourceImpl,\n inject,\n linkedSignal,\n assertInInjectionContext,\n signal,\n computed,\n ResourceStreamItem,\n type ValueEqualityFn,\n ɵRuntimeError,\n ɵRuntimeErrorCode,\n ɵencapsulateResourceError as encapsulateResourceError,\n} from '@angular/core';\nimport type {Subscription} from 'rxjs';\n\nimport {HttpRequest} from './request';\nimport {HttpClient} from './client';\nimport {HttpErrorResponse, HttpEventType, HttpProgressEvent} from './response';\nimport {HttpHeaders} from './headers';\nimport {HttpParams} from './params';\nimport {HttpResourceRef, HttpResourceOptions, HttpResourceRequest} from './resource_api';\n\n/**\n * Type for the `httpRequest` top-level function, which includes the call signatures for the JSON-\n * based `httpRequest` as well as sub-functions for `ArrayBuffer`, `Blob`, and `string` type\n * requests.\n *\n * @experimental 19.2\n */\nexport interface HttpResourceFn {\n /**\n * Create a `Resource` that fetches data with an HTTP GET request to the given URL.\n *\n * The resource will update when the URL changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n url: () => string | undefined,\n options: HttpResourceOptions<TResult, unknown> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n /**\n * Create a `Resource` that fetches data with an HTTP GET request to the given URL.\n *\n * The resource will update when the URL changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n url: () => string | undefined,\n options?: HttpResourceOptions<TResult, unknown>,\n ): HttpResourceRef<TResult | undefined>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n request: () => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, unknown> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n request: () => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, unknown>,\n ): HttpResourceRef<TResult | undefined>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed into an `ArrayBuffer`.\n *\n * @experimental 19.2\n */\n arrayBuffer: {\n <TResult = ArrayBuffer>(\n url: () => string | undefined,\n options: HttpResourceOptions<TResult, ArrayBuffer> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = ArrayBuffer>(\n url: () => string | undefined,\n options?: HttpResourceOptions<TResult, ArrayBuffer>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = ArrayBuffer>(\n request: () => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, ArrayBuffer> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = ArrayBuffer>(\n request: () => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, ArrayBuffer>,\n ): HttpResourceRef<TResult | undefined>;\n };\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed into a `Blob`.\n *\n * @experimental 19.2\n */\n blob: {\n <TResult = Blob>(\n url: () => string | undefined,\n options: HttpResourceOptions<TResult, Blob> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = Blob>(\n url: () => string | undefined,\n options?: HttpResourceOptions<TResult, Blob>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = Blob>(\n request: () => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, Blob> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = Blob>(\n request: () => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, Blob>,\n ): HttpResourceRef<TResult | undefined>;\n };\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as a `string`.\n *\n * @experimental 19.2\n */\n text: {\n <TResult = string>(\n url: () => string | undefined,\n options: HttpResourceOptions<TResult, string> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = string>(\n url: () => string | undefined,\n options?: HttpResourceOptions<TResult, string>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = string>(\n request: () => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, string> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = string>(\n request: () => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, string>,\n ): HttpResourceRef<TResult | undefined>;\n };\n}\n\n/**\n * `httpResource` makes a reactive HTTP request and exposes the request status and response value as\n * a `WritableResource`. By default, it assumes that the backend will return JSON data. To make a\n * request that expects a different kind of data, you can use a sub-constructor of `httpResource`,\n * such as `httpResource.text`.\n *\n * @experimental 19.2\n * @initializerApiFunction\n */\nexport const httpResource: HttpResourceFn = (() => {\n const jsonFn = makeHttpResourceFn<unknown>('json') as HttpResourceFn;\n jsonFn.arrayBuffer = makeHttpResourceFn<ArrayBuffer>('arraybuffer');\n jsonFn.blob = makeHttpResourceFn('blob');\n jsonFn.text = makeHttpResourceFn('text');\n return jsonFn;\n})();\n\n/**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\ntype ResponseType = 'arraybuffer' | 'blob' | 'json' | 'text';\ntype RawRequestType = (() => string | undefined) | (() => HttpResourceRequest | undefined);\n\nfunction makeHttpResourceFn<TRaw>(responseType: ResponseType) {\n return function httpResource<TResult = TRaw>(\n request: RawRequestType,\n options?: HttpResourceOptions<TResult, TRaw>,\n ): HttpResourceRef<TResult> {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(httpResource);\n }\n const injector = options?.injector ?? inject(Injector);\n return new HttpResourceImpl(\n injector,\n () => normalizeRequest(request, responseType),\n options?.defaultValue,\n options?.debugName,\n options?.parse as (value: unknown) => TResult,\n options?.equal as ValueEqualityFn<unknown>,\n ) as HttpResourceRef<TResult>;\n };\n}\n\nfunction normalizeRequest(\n request: RawRequestType,\n responseType: ResponseType,\n): HttpRequest<unknown> | undefined {\n let unwrappedRequest = typeof request === 'function' ? request() : request;\n if (unwrappedRequest === undefined) {\n return undefined;\n } else if (typeof unwrappedRequest === 'string') {\n unwrappedRequest = {url: unwrappedRequest};\n }\n\n const headers =\n unwrappedRequest.headers instanceof HttpHeaders\n ? unwrappedRequest.headers\n : new HttpHeaders(\n unwrappedRequest.headers as\n | Record<string, string | number | Array<string | number>>\n | undefined,\n );\n\n const params =\n unwrappedRequest.params instanceof HttpParams\n ? unwrappedRequest.params\n : new HttpParams({fromObject: unwrappedRequest.params});\n\n return new HttpRequest(\n unwrappedRequest.method ?? 'GET',\n unwrappedRequest.url,\n unwrappedRequest.body ?? null,\n {\n headers,\n params,\n reportProgress: unwrappedRequest.reportProgress,\n withCredentials: unwrappedRequest.withCredentials,\n keepalive: unwrappedRequest.keepalive,\n cache: unwrappedRequest.cache as RequestCache,\n priority: unwrappedRequest.priority as RequestPriority,\n mode: unwrappedRequest.mode as RequestMode,\n redirect: unwrappedRequest.redirect as RequestRedirect,\n responseType,\n context: unwrappedRequest.context,\n transferCache: unwrappedRequest.transferCache,\n credentials: unwrappedRequest.credentials as RequestCredentials,\n referrer: unwrappedRequest.referrer,\n referrerPolicy: unwrappedRequest.referrerPolicy as ReferrerPolicy,\n integrity: unwrappedRequest.integrity,\n timeout: unwrappedRequest.timeout,\n },\n );\n}\nclass HttpResourceImpl<T>\n extends ResourceImpl<T, HttpRequest<unknown> | undefined>\n implements HttpResourceRef<T>\n{\n private client!: HttpClient;\n private _headers = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as HttpHeaders | undefined,\n });\n private _progress = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as HttpProgressEvent | undefined,\n });\n private _statusCode = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as number | undefined,\n });\n\n readonly headers = computed(() =>\n this.status() === 'resolved' || this.status() === 'error' ? this._headers() : undefined,\n );\n readonly progress = this._progress.asReadonly();\n readonly statusCode = this._statusCode.asReadonly();\n\n constructor(\n injector: Injector,\n request: () => HttpRequest<T> | undefined,\n defaultValue: T,\n debugName?: string,\n parse?: (value: unknown) => T,\n equal?: ValueEqualityFn<unknown>,\n ) {\n super(\n request,\n ({params: request, abortSignal}) => {\n let sub: Subscription;\n\n // Track the abort listener so it can be removed if the Observable completes (as a memory\n // optimization).\n const onAbort = () => sub.unsubscribe();\n abortSignal.addEventListener('abort', onAbort);\n\n // Start off stream as undefined.\n const stream = signal<ResourceStreamItem<T>>({value: undefined as T});\n let resolve: ((value: Signal<ResourceStreamItem<T>>) => void) | undefined;\n const promise = new Promise<Signal<ResourceStreamItem<T>>>((r) => (resolve = r));\n\n const send = (value: ResourceStreamItem<T>): void => {\n stream.set(value);\n resolve?.(stream);\n resolve = undefined;\n };\n\n sub = this.client.request(request!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.Response:\n this._headers.set(event.headers);\n this._statusCode.set(event.status);\n try {\n send({value: parse ? parse(event.body) : (event.body as T)});\n } catch (error) {\n send({error: encapsulateResourceError(error)});\n }\n break;\n case HttpEventType.DownloadProgress:\n this._progress.set(event);\n break;\n }\n },\n error: (error) => {\n if (error instanceof HttpErrorResponse) {\n this._headers.set(error.headers);\n this._statusCode.set(error.status);\n }\n\n send({error});\n abortSignal.removeEventListener('abort', onAbort);\n },\n complete: () => {\n if (resolve) {\n send({\n error: new ɵRuntimeError(\n ɵRuntimeErrorCode.RESOURCE_COMPLETED_BEFORE_PRODUCING_VALUE,\n ngDevMode && 'Resource completed before producing a value',\n ),\n });\n }\n abortSignal.removeEventListener('abort', onAbort);\n },\n });\n\n return promise;\n },\n defaultValue,\n equal,\n debugName,\n injector,\n );\n this.client = injector.get(HttpClient);\n }\n\n override set(value: T): void {\n super.set(value);\n\n this._headers.set(undefined);\n this._progress.set(undefined);\n this._statusCode.set(undefined);\n }\n\n // This is a type only override of the method\n declare hasValue: () => this is HttpResourceRef<Exclude<T, undefined>>;\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_BOOTSTRAP_LISTENER,\n ApplicationRef,\n inject,\n InjectionToken,\n makeStateKey,\n Provider,\n StateKey,\n TransferState,\n ɵformatRuntimeError as formatRuntimeError,\n ɵperformanceMarkFeature as performanceMarkFeature,\n ɵtruncateMiddle as truncateMiddle,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {tap} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from './errors';\nimport {HttpHeaders} from './headers';\nimport {HTTP_ROOT_INTERCEPTOR_FNS, HttpHandlerFn} from './interceptor';\nimport {HttpRequest} from './request';\nimport {HttpEvent, HttpResponse} from './response';\nimport {HttpParams} from './params';\n\n/**\n * Options to configure how TransferCache should be used to cache requests made via HttpClient.\n *\n * @param includeHeaders Specifies which headers should be included into cached responses. No\n * headers are included by default.\n * @param filter A function that receives a request as an argument and returns a boolean to indicate\n * whether a request should be included into the cache.\n * @param includePostRequests Enables caching for POST requests. By default, only GET and HEAD\n * requests are cached. This option can be enabled if POST requests are used to retrieve data\n * (for example using GraphQL).\n * @param includeRequestsWithAuthHeaders Enables caching of requests containing either `Authorization`\n * or `Proxy-Authorization` headers. By default, these requests are excluded from caching.\n *\n * @see [Configuring the caching options](guide/ssr#configuring-the-caching-options)\n *\n * @publicApi\n */\nexport type HttpTransferCacheOptions = {\n includeHeaders?: string[];\n filter?: (req: HttpRequest<unknown>) => boolean;\n includePostRequests?: boolean;\n includeRequestsWithAuthHeaders?: boolean;\n};\n\n/**\n * If your application uses different HTTP origins to make API calls (via `HttpClient`) on the server and\n * on the client, the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token allows you to establish a mapping\n * between those origins, so that `HttpTransferCache` feature can recognize those requests as the same\n * ones and reuse the data cached on the server during hydration on the client.\n *\n * IMPORTANT: The `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token should *only* be provided in\n * the *server* code of your application (typically in the `app.server.config.ts` script). Angular throws an\n * error if it detects that the token is defined while running on the client.\n *\n * @usageNotes\n *\n * When the same API endpoint is accessed via `http://internal-domain.com:8080` on the server and\n * via `https://external-domain.com` on the client, you can use the following configuration:\n * ```ts\n * // in app.server.config.ts\n * {\n * provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,\n * useValue: {\n * 'http://internal-domain.com:8080': 'https://external-domain.com'\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken<Record<string, string>>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_TRANSFER_CACHE_ORIGIN_MAP' : '',\n);\n\n/**\n * Keys within cached response data structure.\n */\n\nexport const BODY = 'b';\nexport const HEADERS = 'h';\nexport const STATUS = 's';\nexport const STATUS_TEXT = 'st';\nexport const REQ_URL = 'u';\nexport const RESPONSE_TYPE = 'rt';\n\ninterface TransferHttpResponse {\n /** body */\n [BODY]: any;\n /** headers */\n [HEADERS]: Record<string, string[]>;\n /** status */\n [STATUS]?: number;\n /** statusText */\n [STATUS_TEXT]?: string;\n /** url */\n [REQ_URL]?: string;\n /** responseType */\n [RESPONSE_TYPE]?: HttpRequest<unknown>['responseType'];\n}\n\ninterface CacheOptions extends HttpTransferCacheOptions {\n isCacheActive: boolean;\n}\n\nconst CACHE_OPTIONS = new InjectionToken<CacheOptions>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_TRANSFER_STATE_CACHE_OPTIONS' : '',\n);\n\n/**\n * A list of allowed HTTP methods to cache.\n */\nconst ALLOWED_METHODS = ['GET', 'HEAD'];\n\nexport function transferCacheInterceptorFn(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const {isCacheActive, ...globalOptions} = inject(CACHE_OPTIONS);\n const {transferCache: requestOptions, method: requestMethod} = req;\n\n // In the following situations we do not want to cache the request\n if (\n !isCacheActive ||\n requestOptions === false ||\n // POST requests are allowed either globally or at request level\n (requestMethod === 'POST' && !globalOptions.includePostRequests && !requestOptions) ||\n (requestMethod !== 'POST' && !ALLOWED_METHODS.includes(requestMethod)) ||\n // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey\n (!globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req)) ||\n globalOptions.filter?.(req) === false\n ) {\n return next(req);\n }\n\n const transferState = inject(TransferState);\n\n const originMap: Record<string, string> | null = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {\n optional: true,\n });\n\n if (typeof ngServerMode !== 'undefined' && !ngServerMode && originMap) {\n throw new RuntimeError(\n RuntimeErrorCode.HTTP_ORIGIN_MAP_USED_IN_CLIENT,\n ngDevMode &&\n 'Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and ' +\n 'present in the client side code. Please ensure that this token is only provided in the ' +\n 'server code of the application.',\n );\n }\n\n const requestUrl =\n typeof ngServerMode !== 'undefined' && ngServerMode && originMap\n ? mapRequestOriginUrl(req.url, originMap)\n : req.url;\n\n const storeKey = makeCacheKey(req, requestUrl);\n const response = transferState.get(storeKey, null);\n\n let headersToInclude = globalOptions.includeHeaders;\n if (typeof requestOptions === 'object' && requestOptions.includeHeaders) {\n // Request-specific config takes precedence over the global config.\n headersToInclude = requestOptions.includeHeaders;\n }\n\n if (response) {\n const {\n [BODY]: undecodedBody,\n [RESPONSE_TYPE]: responseType,\n [HEADERS]: httpHeaders,\n [STATUS]: status,\n [STATUS_TEXT]: statusText,\n [REQ_URL]: url,\n } = response;\n // Request found in cache. Respond using it.\n let body: ArrayBuffer | Blob | string | undefined = undecodedBody;\n\n switch (responseType) {\n case 'arraybuffer':\n body = fromBase64(undecodedBody);\n break;\n case 'blob':\n body = new Blob([fromBase64(undecodedBody)]);\n break;\n }\n\n // We want to warn users accessing a header provided from the cache\n // That HttpTransferCache alters the headers\n // The warning will be logged a single time by HttpHeaders instance\n let headers = new HttpHeaders(httpHeaders);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Append extra logic in dev mode to produce a warning when a header\n // that was not transferred to the client is accessed in the code via `get`\n // and `has` calls.\n headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);\n }\n\n return of(\n new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url,\n }),\n );\n }\n\n const event$ = next(req);\n\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n // Request not found in cache. Make the request and cache it if on the server.\n return event$.pipe(\n tap((event: HttpEvent<unknown>) => {\n // Only cache successful HTTP responses.\n if (event instanceof HttpResponse) {\n transferState.set<TransferHttpResponse>(storeKey, {\n [BODY]:\n req.responseType === 'arraybuffer' || req.responseType === 'blob'\n ? toBase64(event.body)\n : event.body,\n [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),\n [STATUS]: event.status,\n [STATUS_TEXT]: event.statusText,\n [REQ_URL]: requestUrl,\n [RESPONSE_TYPE]: req.responseType,\n });\n }\n }),\n );\n }\n\n return event$;\n}\n\n/** @returns true when the requests contains autorization related headers. */\nfunction hasAuthHeaders(req: HttpRequest<unknown>): boolean {\n return req.headers.has('authorization') || req.headers.has('proxy-authorization');\n}\n\nfunction getFilteredHeaders(\n headers: HttpHeaders,\n includeHeaders: string[] | undefined,\n): Record<string, string[]> {\n if (!includeHeaders) {\n return {};\n }\n\n const headersMap: Record<string, string[]> = {};\n for (const key of includeHeaders) {\n const values = headers.getAll(key);\n if (values !== null) {\n headersMap[key] = values;\n }\n }\n\n return headersMap;\n}\n\nfunction sortAndConcatParams(params: HttpParams | URLSearchParams): string {\n return [...params.keys()]\n .sort()\n .map((k) => `${k}=${params.getAll(k)}`)\n .join('&');\n}\n\nfunction makeCacheKey(\n request: HttpRequest<any>,\n mappedRequestUrl: string,\n): StateKey<TransferHttpResponse> {\n // make the params encoded same as a url so it's easy to identify\n const {params, method, responseType} = request;\n const encodedParams = sortAndConcatParams(params);\n\n let serializedBody = request.serializeBody();\n if (serializedBody instanceof URLSearchParams) {\n serializedBody = sortAndConcatParams(serializedBody);\n } else if (typeof serializedBody !== 'string') {\n serializedBody = '';\n }\n\n const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join('|');\n const hash = generateHash(key);\n\n return makeStateKey(hash);\n}\n\n/**\n * A method that returns a hash representation of a string using a variant of DJB2 hash\n * algorithm.\n *\n * This is the same hashing logic that is used to generate component ids.\n */\nfunction generateHash(value: string): string {\n let hash = 0;\n\n for (const char of value) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n}\n\nfunction toBase64(buffer: unknown): string {\n //TODO: replace with when is Baseline widely available\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64\n const bytes = new Uint8Array(buffer as ArrayBufferLike);\n\n const CHUNK_SIZE = 0x8000; // 32,768 bytes (~32 KB) per chunk, to avoid stack overflow\n\n let binaryString = '';\n\n for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n const chunk = bytes.subarray(i, i + CHUNK_SIZE);\n binaryString += String.fromCharCode.apply(null, chunk as unknown as number[]);\n }\n return btoa(binaryString);\n}\n\nfunction fromBase64(base64: string): ArrayBuffer {\n const binary = atob(base64);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return bytes.buffer;\n}\n\n/**\n * Returns the DI providers needed to enable HTTP transfer cache.\n *\n * By default, when using server rendering, requests are performed twice: once on the server and\n * other one on the browser.\n *\n * When these providers are added, requests performed on the server are cached and reused during the\n * bootstrapping of the application in the browser thus avoiding duplicate requests and reducing\n * load time.\n *\n * @see [Caching data when using HttpClient](guide/ssr#configuring-the-caching-options)\n *\n */\nexport function withHttpTransferCache(cacheOptions: HttpTransferCacheOptions): Provider[] {\n return [\n {\n provide: CACHE_OPTIONS,\n useFactory: (): CacheOptions => {\n performanceMarkFeature('NgHttpTransferCache');\n return {isCacheActive: true, ...cacheOptions};\n },\n },\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: transferCacheInterceptorFn,\n multi: true,\n },\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const cacheState = inject(CACHE_OPTIONS);\n\n return () => {\n appRef.whenStable().then(() => {\n cacheState.isCacheActive = false;\n });\n };\n },\n },\n ];\n}\n\n/**\n * This function will add a proxy to an HttpHeader to intercept calls to get/has\n * and log a warning if the header entry requested has been removed\n */\nfunction appendMissingHeadersDetection(\n url: string,\n headers: HttpHeaders,\n headersToInclude: string[],\n): HttpHeaders {\n const warningProduced = new Set();\n return new Proxy<HttpHeaders>(headers, {\n get(target: HttpHeaders, prop: keyof HttpHeaders): unknown {\n const value = Reflect.get(target, prop);\n const methods: Set<keyof HttpHeaders> = new Set(['get', 'has', 'getAll']);\n\n if (typeof value !== 'function' || !methods.has(prop)) {\n return value;\n }\n\n return (headerName: string) => {\n // We log when the key has been removed and a warning hasn't been produced for the header\n const key = (prop + ':' + headerName).toLowerCase(); // e.g. `get:cache-control`\n if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {\n warningProduced.add(key);\n const truncatedUrl = truncateMiddle(url);\n\n console.warn(\n formatRuntimeError(\n RuntimeErrorCode.HEADERS_ALTERED_BY_TRANSFER_CACHE,\n `Angular detected that the \\`${headerName}\\` header is accessed, but the value of the header ` +\n `was not transferred from the server to the client by the HttpTransferCache. ` +\n `To include the value of the \\`${headerName}\\` header for the \\`${truncatedUrl}\\` request, ` +\n `use the \\`includeHeaders\\` list. The \\`includeHeaders\\` can be defined either ` +\n `on a request level by adding the \\`transferCache\\` parameter, or on an application ` +\n `level by adding the \\`httpCacheTransfer.includeHeaders\\` argument to the ` +\n `\\`provideClientHydration()\\` call. `,\n ),\n );\n }\n\n // invoking the original method\n return (value as Function).apply(target, [headerName]);\n };\n },\n });\n}\n\nfunction mapRequestOriginUrl(url: string, originMap: Record<string, string>): string {\n const origin = new URL(url, 'resolve://').origin;\n const mappedOrigin = originMap[origin];\n if (!mappedOrigin) {\n return url;\n }\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n verifyMappedOrigin(mappedOrigin);\n }\n\n return url.replace(origin, mappedOrigin);\n}\n\nfunction verifyMappedOrigin(url: string): void {\n if (new URL(url, 'resolve://').pathname !== '/') {\n throw new RuntimeError(\n RuntimeErrorCode.HTTP_ORIGIN_MAP_CONTAINS_PATH,\n 'Angular detected a URL with a path segment in the value provided for the ' +\n `\\`HTTP_TRANSFER_CACHE_ORIGIN_MAP\\` token: ${url}. The map should only contain origins ` +\n 'without any other segments.',\n );\n }\n}\n"],"names":["httpResource","jsonFn","makeHttpResourceFn","arrayBuffer","blob","text","responseType","request","options","ngDevMode","injector","assertInInjectionContext","inject","Injector","HttpResourceImpl","normalizeRequest","defaultValue","debugName","parse","equal","unwrappedRequest","undefined","url","headers","HttpHeaders","params","HttpParams","fromObject","HttpRequest","method","body","reportProgress","withCredentials","keepalive","cache","priority","mode","redirect","context","transferCache","credentials","referrer","referrerPolicy","integrity","timeout","ResourceImpl","client","_headers","linkedSignal","source","extRequest","computation","_progress","_statusCode","computed","status","progress","asReadonly","statusCode","constructor","abortSignal","sub","onAbort","unsubscribe","addEventListener","stream","signal","value","resolve","promise","Promise","r","send","set","subscribe","next","event","type","HttpEventType","Response","error","encapsulateResourceError","DownloadProgress","HttpErrorResponse","removeEventListener","complete","ɵRuntimeError","get","HttpClient","HTTP_TRANSFER_CACHE_ORIGIN_MAP","InjectionToken","BODY","HEADERS","STATUS","STATUS_TEXT","REQ_URL","RESPONSE_TYPE","CACHE_OPTIONS","ALLOWED_METHODS","transferCacheInterceptorFn","req","isCacheActive","globalOptions","requestOptions","requestMethod","includePostRequests","includes","includeRequestsWithAuthHeaders","hasAuthHeaders","filter","transferState","TransferState","originMap","optional","ngServerMode","RuntimeError","requestUrl","mapRequestOriginUrl","storeKey","makeCacheKey","response","headersToInclude","includeHeaders","undecodedBody","httpHeaders","statusText","fromBase64","Blob","appendMissingHeadersDetection","of","HttpResponse","event$","pipe","tap","toBase64","getFilteredHeaders","has","headersMap","key","values","getAll","sortAndConcatParams","keys","sort","map","k","join","mappedRequestUrl","encodedParams","serializedBody","serializeBody","URLSearchParams","hash","generateHash","makeStateKey","char","Math","imul","charCodeAt","toString","buffer","bytes","Uint8Array","CHUNK_SIZE","binaryString","i","length","chunk","subarray","String","fromCharCode","apply","btoa","base64","binary","atob","from","c","withHttpTransferCache","cacheOptions","provide","useFactory","performanceMarkFeature","HTTP_ROOT_INTERCEPTOR_FNS","useValue","multi","APP_BOOTSTRAP_LISTENER","appRef","ApplicationRef","cacheState","whenStable","then","warningProduced","Set","Proxy","target","prop","Reflect","methods","headerName","toLowerCase","add","truncatedUrl","truncateMiddle","console","warn","formatRuntimeError","origin","URL","mappedOrigin","verifyMappedOrigin","replace","pathname"],"mappings":"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"}
1
+ {"version":3,"file":"http.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/transfer_cache.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/resource.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 APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n inject,\n InjectionToken,\n makeStateKey,\n Provider,\n StateKey,\n TransferState,\n ɵformatRuntimeError as formatRuntimeError,\n ɵperformanceMarkFeature as performanceMarkFeature,\n ɵtruncateMiddle as truncateMiddle,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {tap} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from './errors';\nimport {HttpHeaders} from './headers';\nimport {HTTP_ROOT_INTERCEPTOR_FNS, HttpHandlerFn} from './interceptor';\nimport {HttpRequest} from './request';\nimport {HttpEvent, HttpResponse} from './response';\nimport {HttpParams} from './params';\n\n/**\n * Options to configure how TransferCache should be used to cache requests made via HttpClient.\n *\n * @param includeHeaders Specifies which headers should be included into cached responses. No\n * headers are included by default.\n * @param filter A function that receives a request as an argument and returns a boolean to indicate\n * whether a request should be included into the cache.\n * @param includePostRequests Enables caching for POST requests. By default, only GET and HEAD\n * requests are cached. This option can be enabled if POST requests are used to retrieve data\n * (for example using GraphQL).\n * @param includeRequestsWithAuthHeaders Enables caching of requests containing either `Authorization`\n * or `Proxy-Authorization` headers. By default, these requests are excluded from caching.\n *\n * @see [Configuring the caching options](guide/ssr#configuring-the-caching-options)\n *\n * @publicApi\n */\nexport type HttpTransferCacheOptions = {\n includeHeaders?: string[];\n filter?: (req: HttpRequest<unknown>) => boolean;\n includePostRequests?: boolean;\n includeRequestsWithAuthHeaders?: boolean;\n};\n\n/**\n * If your application uses different HTTP origins to make API calls (via `HttpClient`) on the server and\n * on the client, the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token allows you to establish a mapping\n * between those origins, so that `HttpTransferCache` feature can recognize those requests as the same\n * ones and reuse the data cached on the server during hydration on the client.\n *\n * IMPORTANT: The `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token should *only* be provided in\n * the *server* code of your application (typically in the `app.server.config.ts` script). Angular throws an\n * error if it detects that the token is defined while running on the client.\n *\n * @usageNotes\n *\n * When the same API endpoint is accessed via `http://internal-domain.com:8080` on the server and\n * via `https://external-domain.com` on the client, you can use the following configuration:\n * ```ts\n * // in app.server.config.ts\n * {\n * provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,\n * useValue: {\n * 'http://internal-domain.com:8080': 'https://external-domain.com'\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport const HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken<Record<string, string>>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_TRANSFER_CACHE_ORIGIN_MAP' : '',\n);\n\n/**\n * Keys within cached response data structure.\n */\n\nexport const BODY = 'b';\nexport const HEADERS = 'h';\nexport const STATUS = 's';\nexport const STATUS_TEXT = 'st';\nexport const REQ_URL = 'u';\nexport const RESPONSE_TYPE = 'rt';\n\ninterface TransferHttpResponse {\n /** body */\n [BODY]: any;\n /** headers */\n [HEADERS]: Record<string, string[]>;\n /** status */\n [STATUS]?: number;\n /** statusText */\n [STATUS_TEXT]?: string;\n /** url */\n [REQ_URL]?: string;\n /** responseType */\n [RESPONSE_TYPE]?: HttpRequest<unknown>['responseType'];\n}\n\ninterface CacheOptions extends HttpTransferCacheOptions {\n isCacheActive: boolean;\n}\n\nexport const CACHE_OPTIONS = new InjectionToken<CacheOptions>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_TRANSFER_STATE_CACHE_OPTIONS' : '',\n);\n\n/**\n * A list of allowed HTTP methods to cache.\n */\nconst ALLOWED_METHODS = ['GET', 'HEAD'];\n\nfunction shouldCacheRequest(req: HttpRequest<unknown>, options: CacheOptions): boolean {\n const {isCacheActive, ...globalOptions} = options;\n const {transferCache: requestOptions, method: requestMethod} = req;\n\n if (\n !isCacheActive ||\n requestOptions === false ||\n // POST requests are allowed either globally or at request level\n (requestMethod === 'POST' && !globalOptions.includePostRequests && !requestOptions) ||\n (requestMethod !== 'POST' && !ALLOWED_METHODS.includes(requestMethod)) ||\n // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey\n (!globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req)) ||\n globalOptions.filter?.(req) === false\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction getHeadersToInclude(\n options: CacheOptions,\n requestOptions: HttpTransferCacheOptions | boolean | undefined,\n): string[] | undefined {\n const {includeHeaders: globalHeaders} = options;\n let headersToInclude = globalHeaders;\n if (typeof requestOptions === 'object' && requestOptions.includeHeaders) {\n // Request-specific config takes precedence over the global config.\n headersToInclude = requestOptions.includeHeaders;\n }\n return headersToInclude;\n}\n\nexport function retrieveStateFromCache(\n req: HttpRequest<unknown>,\n options: CacheOptions,\n transferState: TransferState,\n originMap: Record<string, string> | null,\n): HttpResponse<unknown> | null {\n const {transferCache: requestOptions} = req;\n\n // In the following situations we do not want to cache the request\n if (!shouldCacheRequest(req, options)) {\n return null;\n }\n\n if (typeof ngServerMode !== 'undefined' && !ngServerMode && originMap) {\n throw new RuntimeError(\n RuntimeErrorCode.HTTP_ORIGIN_MAP_USED_IN_CLIENT,\n ngDevMode &&\n 'Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and ' +\n 'present in the client side code. Please ensure that this token is only provided in the ' +\n 'server code of the application.',\n );\n }\n\n const requestUrl =\n typeof ngServerMode !== 'undefined' && ngServerMode && originMap\n ? mapRequestOriginUrl(req.url, originMap)\n : req.url;\n\n const storeKey = makeCacheKey(req, requestUrl);\n const response = transferState.get(storeKey, null);\n\n const headersToInclude = getHeadersToInclude(options, requestOptions);\n\n if (response) {\n const {\n [BODY]: undecodedBody,\n [RESPONSE_TYPE]: responseType,\n [HEADERS]: httpHeaders,\n [STATUS]: status,\n [STATUS_TEXT]: statusText,\n [REQ_URL]: url,\n } = response;\n // Request found in cache. Respond using it.\n let body: ArrayBuffer | Blob | string | undefined = undecodedBody;\n\n switch (responseType) {\n case 'arraybuffer':\n body = fromBase64(undecodedBody);\n break;\n case 'blob':\n body = new Blob([fromBase64(undecodedBody)]);\n break;\n }\n\n // We want to warn users accessing a header provided from the cache\n // That HttpTransferCache alters the headers\n // The warning will be logged a single time by HttpHeaders instance\n let headers = new HttpHeaders(httpHeaders);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Append extra logic in dev mode to produce a warning when a header\n // that was not transferred to the client is accessed in the code via `get`\n // and `has` calls.\n headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);\n }\n\n return new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url,\n });\n }\n\n return null;\n}\n\nexport function transferCacheInterceptorFn(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const options = inject(CACHE_OPTIONS);\n const transferState = inject(TransferState);\n\n const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {optional: true});\n\n const cachedResponse = retrieveStateFromCache(req, options, transferState, originMap);\n if (cachedResponse) {\n return of(cachedResponse);\n }\n\n const {transferCache: requestOptions} = req;\n const headersToInclude = getHeadersToInclude(options, requestOptions);\n\n const requestUrl =\n typeof ngServerMode !== 'undefined' && ngServerMode && originMap\n ? mapRequestOriginUrl(req.url, originMap)\n : req.url;\n const storeKey = makeCacheKey(req, requestUrl);\n\n // In the following situations we do not want to cache the request\n if (!shouldCacheRequest(req, options)) {\n return next(req);\n }\n\n const event$ = next(req);\n\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n // Request not found in cache. Make the request and cache it if on the server.\n return event$.pipe(\n tap((event: HttpEvent<unknown>) => {\n // Only cache successful HTTP responses.\n if (event instanceof HttpResponse) {\n transferState.set<TransferHttpResponse>(storeKey, {\n [BODY]:\n req.responseType === 'arraybuffer' || req.responseType === 'blob'\n ? toBase64(event.body)\n : event.body,\n [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),\n [STATUS]: event.status,\n [STATUS_TEXT]: event.statusText,\n [REQ_URL]: requestUrl,\n [RESPONSE_TYPE]: req.responseType,\n });\n }\n }),\n );\n }\n\n return event$;\n}\n\n/** @returns true when the requests contains autorization related headers. */\nfunction hasAuthHeaders(req: HttpRequest<unknown>): boolean {\n return req.headers.has('authorization') || req.headers.has('proxy-authorization');\n}\n\nfunction getFilteredHeaders(\n headers: HttpHeaders,\n includeHeaders: string[] | undefined,\n): Record<string, string[]> {\n if (!includeHeaders) {\n return {};\n }\n\n const headersMap: Record<string, string[]> = {};\n for (const key of includeHeaders) {\n const values = headers.getAll(key);\n if (values !== null) {\n headersMap[key] = values;\n }\n }\n\n return headersMap;\n}\n\nfunction sortAndConcatParams(params: HttpParams | URLSearchParams): string {\n return [...params.keys()]\n .sort()\n .map((k) => `${k}=${params.getAll(k)}`)\n .join('&');\n}\n\nfunction makeCacheKey(\n request: HttpRequest<any>,\n mappedRequestUrl: string,\n): StateKey<TransferHttpResponse> {\n // make the params encoded same as a url so it's easy to identify\n const {params, method, responseType} = request;\n const encodedParams = sortAndConcatParams(params);\n\n let serializedBody = request.serializeBody();\n if (serializedBody instanceof URLSearchParams) {\n serializedBody = sortAndConcatParams(serializedBody);\n } else if (typeof serializedBody !== 'string') {\n serializedBody = '';\n }\n\n const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join('|');\n const hash = generateHash(key);\n\n return makeStateKey(hash);\n}\n\n/**\n * A method that returns a hash representation of a string using a variant of DJB2 hash\n * algorithm.\n *\n * This is the same hashing logic that is used to generate component ids.\n */\nfunction generateHash(value: string): string {\n let hash = 0;\n\n for (const char of value) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n}\n\nfunction toBase64(buffer: unknown): string {\n //TODO: replace with when is Baseline widely available\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64\n const bytes = new Uint8Array(buffer as ArrayBufferLike);\n\n const CHUNK_SIZE = 0x8000; // 32,768 bytes (~32 KB) per chunk, to avoid stack overflow\n\n let binaryString = '';\n\n for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n const chunk = bytes.subarray(i, i + CHUNK_SIZE);\n binaryString += String.fromCharCode.apply(null, chunk as unknown as number[]);\n }\n return btoa(binaryString);\n}\n\nfunction fromBase64(base64: string): ArrayBuffer {\n const binary = atob(base64);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return bytes.buffer;\n}\n\n/**\n * Returns the DI providers needed to enable HTTP transfer cache.\n *\n * By default, when using server rendering, requests are performed twice: once on the server and\n * other one on the browser.\n *\n * When these providers are added, requests performed on the server are cached and reused during the\n * bootstrapping of the application in the browser thus avoiding duplicate requests and reducing\n * load time.\n *\n * @see [Caching data when using HttpClient](guide/ssr#configuring-the-caching-options)\n *\n */\nexport function withHttpTransferCache(cacheOptions: HttpTransferCacheOptions): Provider[] {\n return [\n {\n provide: CACHE_OPTIONS,\n useFactory: (): CacheOptions => {\n performanceMarkFeature('NgHttpTransferCache');\n return {isCacheActive: true, ...cacheOptions};\n },\n },\n {\n provide: HTTP_ROOT_INTERCEPTOR_FNS,\n useValue: transferCacheInterceptorFn,\n multi: true,\n },\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const cacheState = inject(CACHE_OPTIONS);\n\n return () => {\n appRef.whenStable().then(() => {\n cacheState.isCacheActive = false;\n });\n };\n },\n },\n ];\n}\n\n/**\n * This function will add a proxy to an HttpHeader to intercept calls to get/has\n * and log a warning if the header entry requested has been removed\n */\nfunction appendMissingHeadersDetection(\n url: string,\n headers: HttpHeaders,\n headersToInclude: string[],\n): HttpHeaders {\n const warningProduced = new Set();\n return new Proxy<HttpHeaders>(headers, {\n get(target: HttpHeaders, prop: keyof HttpHeaders): unknown {\n const value = Reflect.get(target, prop);\n const methods: Set<keyof HttpHeaders> = new Set(['get', 'has', 'getAll']);\n\n if (typeof value !== 'function' || !methods.has(prop)) {\n return value;\n }\n\n return (headerName: string) => {\n // We log when the key has been removed and a warning hasn't been produced for the header\n const key = (prop + ':' + headerName).toLowerCase(); // e.g. `get:cache-control`\n if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {\n warningProduced.add(key);\n const truncatedUrl = truncateMiddle(url);\n\n console.warn(\n formatRuntimeError(\n RuntimeErrorCode.HEADERS_ALTERED_BY_TRANSFER_CACHE,\n `Angular detected that the \\`${headerName}\\` header is accessed, but the value of the header ` +\n `was not transferred from the server to the client by the HttpTransferCache. ` +\n `To include the value of the \\`${headerName}\\` header for the \\`${truncatedUrl}\\` request, ` +\n `use the \\`includeHeaders\\` list. The \\`includeHeaders\\` can be defined either ` +\n `on a request level by adding the \\`transferCache\\` parameter, or on an application ` +\n `level by adding the \\`httpCacheTransfer.includeHeaders\\` argument to the ` +\n `\\`provideClientHydration()\\` call. `,\n ),\n );\n }\n\n // invoking the original method\n return (value as Function).apply(target, [headerName]);\n };\n },\n });\n}\n\nfunction mapRequestOriginUrl(url: string, originMap: Record<string, string>): string {\n const origin = new URL(url, 'resolve://').origin;\n const mappedOrigin = originMap[origin];\n if (!mappedOrigin) {\n return url;\n }\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n verifyMappedOrigin(mappedOrigin);\n }\n\n return url.replace(origin, mappedOrigin);\n}\n\nfunction verifyMappedOrigin(url: string): void {\n if (new URL(url, 'resolve://').pathname !== '/') {\n throw new RuntimeError(\n RuntimeErrorCode.HTTP_ORIGIN_MAP_CONTAINS_PATH,\n 'Angular detected a URL with a path segment in the value provided for the ' +\n `\\`HTTP_TRANSFER_CACHE_ORIGIN_MAP\\` token: ${url}. The map should only contain origins ` +\n 'without any other segments.',\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 {\n assertInInjectionContext,\n computed,\n ɵencapsulateResourceError as encapsulateResourceError,\n inject,\n Injector,\n linkedSignal,\n ɵResourceImpl as ResourceImpl,\n type ResourceParamsContext,\n ResourceStreamItem,\n Signal,\n signal,\n TransferState,\n type ValueEqualityFn,\n ɵRuntimeError,\n ɵRuntimeErrorCode,\n} from '@angular/core';\nimport type {Subscription} from 'rxjs';\n\nimport {HttpClient} from './client';\nimport {HttpHeaders} from './headers';\nimport {HttpParams} from './params';\nimport {HttpRequest} from './request';\nimport {HttpResourceOptions, HttpResourceRef, HttpResourceRequest} from './resource_api';\nimport {HttpErrorResponse, HttpEventType, HttpProgressEvent} from './response';\nimport {\n CACHE_OPTIONS,\n HTTP_TRANSFER_CACHE_ORIGIN_MAP,\n retrieveStateFromCache,\n} from './transfer_cache';\n\n/**\n * Type for the `httpRequest` top-level function, which includes the call signatures for the JSON-\n * based `httpRequest` as well as sub-functions for `ArrayBuffer`, `Blob`, and `string` type\n * requests.\n *\n * @experimental 19.2\n */\nexport interface HttpResourceFn {\n /**\n * Create a `Resource` that fetches data with an HTTP GET request to the given URL.\n *\n * The resource will update when the URL changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options: HttpResourceOptions<TResult, unknown> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n /**\n * Create a `Resource` that fetches data with an HTTP GET request to the given URL.\n *\n * The resource will update when the URL changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options?: HttpResourceOptions<TResult, unknown>,\n ): HttpResourceRef<TResult | undefined>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, unknown> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as JSON by default - use a sub-function of\n * `httpResource`, such as `httpResource.text()`, to parse the response differently.\n *\n * @experimental 19.2\n */\n <TResult = unknown>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, unknown>,\n ): HttpResourceRef<TResult | undefined>;\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed into an `ArrayBuffer`.\n *\n * @experimental 19.2\n */\n arrayBuffer: {\n <TResult = ArrayBuffer>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options: HttpResourceOptions<TResult, ArrayBuffer> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = ArrayBuffer>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options?: HttpResourceOptions<TResult, ArrayBuffer>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = ArrayBuffer>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, ArrayBuffer> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = ArrayBuffer>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, ArrayBuffer>,\n ): HttpResourceRef<TResult | undefined>;\n };\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed into a `Blob`.\n *\n * @experimental 19.2\n */\n blob: {\n <TResult = Blob>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options: HttpResourceOptions<TResult, Blob> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = Blob>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options?: HttpResourceOptions<TResult, Blob>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = Blob>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, Blob> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = Blob>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, Blob>,\n ): HttpResourceRef<TResult | undefined>;\n };\n\n /**\n * Create a `Resource` that fetches data with the configured HTTP request.\n *\n * The resource will update when the URL or request changes via signals.\n *\n * Uses `HttpClient` to make requests and supports interceptors, testing, and the other features\n * of the `HttpClient` API. Data is parsed as a `string`.\n *\n * @experimental 19.2\n */\n text: {\n <TResult = string>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options: HttpResourceOptions<TResult, string> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = string>(\n url: (ctx: ResourceParamsContext) => string | undefined,\n options?: HttpResourceOptions<TResult, string>,\n ): HttpResourceRef<TResult | undefined>;\n\n <TResult = string>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options: HttpResourceOptions<TResult, string> & {defaultValue: NoInfer<TResult>},\n ): HttpResourceRef<TResult>;\n\n <TResult = string>(\n request: (ctx: ResourceParamsContext) => HttpResourceRequest | undefined,\n options?: HttpResourceOptions<TResult, string>,\n ): HttpResourceRef<TResult | undefined>;\n };\n}\n\n/**\n * `httpResource` makes a reactive HTTP request and exposes the request status and response value as\n * a `WritableResource`. By default, it assumes that the backend will return JSON data. To make a\n * request that expects a different kind of data, you can use a sub-constructor of `httpResource`,\n * such as `httpResource.text`.\n *\n * @experimental 19.2\n * @initializerApiFunction\n */\nexport const httpResource: HttpResourceFn = (() => {\n const jsonFn = makeHttpResourceFn<unknown>('json') as HttpResourceFn;\n jsonFn.arrayBuffer = makeHttpResourceFn<ArrayBuffer>('arraybuffer');\n jsonFn.blob = makeHttpResourceFn('blob');\n jsonFn.text = makeHttpResourceFn('text');\n return jsonFn;\n})();\n\n/**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\ntype ResponseType = 'arraybuffer' | 'blob' | 'json' | 'text';\ntype RawRequestType =\n | ((ctx: ResourceParamsContext) => string | undefined)\n | ((ctx: ResourceParamsContext) => HttpResourceRequest | undefined);\n\nfunction makeHttpResourceFn<TRaw>(responseType: ResponseType) {\n return function httpResource<TResult = TRaw>(\n request: RawRequestType,\n options?: HttpResourceOptions<TResult, TRaw>,\n ): HttpResourceRef<TResult> {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(httpResource);\n }\n const injector = options?.injector ?? inject(Injector);\n\n const cacheOptions = injector.get(CACHE_OPTIONS, null, {optional: true});\n const transferState = injector.get(TransferState, null, {optional: true});\n const originMap = injector.get(HTTP_TRANSFER_CACHE_ORIGIN_MAP, null, {optional: true});\n\n const getInitialStream = (req: HttpRequest<unknown> | undefined) => {\n if (cacheOptions && transferState && req) {\n const cachedResponse = retrieveStateFromCache(req, cacheOptions, transferState, originMap);\n if (cachedResponse) {\n try {\n const body = cachedResponse.body as TRaw;\n const parsed = options?.parse ? options.parse(body) : (body as unknown as TResult);\n return signal({value: parsed});\n } catch (e) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `Angular detected an error while parsing the cached response for the httpResource at \\`${req.url}\\`. ` +\n `The resource will fall back to its default value and try again asynchronously.`,\n e,\n );\n }\n }\n }\n }\n return undefined;\n };\n\n return new HttpResourceImpl(\n injector,\n (ctx: ResourceParamsContext) => normalizeRequest(ctx, request, responseType),\n options?.defaultValue,\n options?.debugName,\n options?.parse as (value: unknown) => TResult,\n options?.equal as ValueEqualityFn<unknown>,\n getInitialStream,\n ) as HttpResourceRef<TResult>;\n };\n}\n\nfunction normalizeRequest(\n ctx: ResourceParamsContext,\n request: RawRequestType,\n responseType: ResponseType,\n): HttpRequest<unknown> | undefined {\n let unwrappedRequest = typeof request === 'function' ? request(ctx) : request;\n if (unwrappedRequest === undefined) {\n return undefined;\n } else if (typeof unwrappedRequest === 'string') {\n unwrappedRequest = {url: unwrappedRequest};\n }\n\n const headers =\n unwrappedRequest.headers instanceof HttpHeaders\n ? unwrappedRequest.headers\n : new HttpHeaders(\n unwrappedRequest.headers as\n | Record<string, string | number | Array<string | number>>\n | undefined,\n );\n\n const params =\n unwrappedRequest.params instanceof HttpParams\n ? unwrappedRequest.params\n : new HttpParams({fromObject: unwrappedRequest.params});\n\n return new HttpRequest(\n unwrappedRequest.method ?? 'GET',\n unwrappedRequest.url,\n unwrappedRequest.body ?? null,\n {\n headers,\n params,\n reportProgress: unwrappedRequest.reportProgress,\n withCredentials: unwrappedRequest.withCredentials,\n keepalive: unwrappedRequest.keepalive,\n cache: unwrappedRequest.cache as RequestCache,\n priority: unwrappedRequest.priority as RequestPriority,\n mode: unwrappedRequest.mode as RequestMode,\n redirect: unwrappedRequest.redirect as RequestRedirect,\n responseType,\n context: unwrappedRequest.context,\n transferCache: unwrappedRequest.transferCache,\n credentials: unwrappedRequest.credentials as RequestCredentials,\n referrer: unwrappedRequest.referrer,\n referrerPolicy: unwrappedRequest.referrerPolicy as ReferrerPolicy,\n integrity: unwrappedRequest.integrity,\n timeout: unwrappedRequest.timeout,\n },\n );\n}\nclass HttpResourceImpl<T>\n extends ResourceImpl<T, HttpRequest<unknown> | undefined>\n implements HttpResourceRef<T>\n{\n private client!: HttpClient;\n private _headers = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as HttpHeaders | undefined,\n });\n private _progress = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as HttpProgressEvent | undefined,\n });\n private _statusCode = linkedSignal({\n source: this.extRequest,\n computation: () => undefined as number | undefined,\n });\n\n readonly headers = computed(() =>\n this.status() === 'resolved' || this.status() === 'error' ? this._headers() : undefined,\n );\n readonly progress = this._progress.asReadonly();\n readonly statusCode = this._statusCode.asReadonly();\n\n constructor(\n injector: Injector,\n request: (ctx: ResourceParamsContext) => HttpRequest<T> | undefined,\n defaultValue: T,\n debugName?: string,\n parse?: (value: unknown) => T,\n equal?: ValueEqualityFn<unknown>,\n getInitialStream?: (\n request: HttpRequest<unknown> | undefined,\n ) => Signal<ResourceStreamItem<T>> | undefined,\n ) {\n super(\n request,\n ({params: request, abortSignal}) => {\n let sub: Subscription;\n\n // Track the abort listener so it can be removed if the Observable completes (as a memory\n // optimization).\n const onAbort = () => sub.unsubscribe();\n abortSignal.addEventListener('abort', onAbort);\n\n // Start off stream as undefined.\n const stream = signal<ResourceStreamItem<T>>({value: undefined as T});\n let resolve: ((value: Signal<ResourceStreamItem<T>>) => void) | undefined;\n const promise = new Promise<Signal<ResourceStreamItem<T>>>((r) => (resolve = r));\n\n const send = (value: ResourceStreamItem<T>): void => {\n stream.set(value);\n resolve?.(stream);\n resolve = undefined;\n };\n\n sub = this.client.request(request!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.Response:\n this._headers.set(event.headers);\n this._statusCode.set(event.status);\n try {\n send({value: parse ? parse(event.body) : (event.body as T)});\n } catch (error) {\n send({error: encapsulateResourceError(error)});\n }\n break;\n case HttpEventType.DownloadProgress:\n this._progress.set(event);\n break;\n }\n },\n error: (error) => {\n if (error instanceof HttpErrorResponse) {\n this._headers.set(error.headers);\n this._statusCode.set(error.status);\n }\n\n send({error});\n abortSignal.removeEventListener('abort', onAbort);\n },\n complete: () => {\n if (resolve) {\n send({\n error: new ɵRuntimeError(\n ɵRuntimeErrorCode.RESOURCE_COMPLETED_BEFORE_PRODUCING_VALUE,\n ngDevMode && 'Resource completed before producing a value',\n ),\n });\n }\n abortSignal.removeEventListener('abort', onAbort);\n },\n });\n\n return promise;\n },\n defaultValue,\n equal,\n debugName,\n injector,\n getInitialStream,\n );\n this.client = injector.get(HttpClient);\n }\n\n override set(value: T): void {\n super.set(value);\n\n this._headers.set(undefined);\n this._progress.set(undefined);\n this._statusCode.set(undefined);\n }\n\n // This is a type only override of the method\n declare hasValue: () => this is HttpResourceRef<Exclude<T, undefined>>;\n}\n"],"names":["HTTP_TRANSFER_CACHE_ORIGIN_MAP","InjectionToken","ngDevMode","BODY","HEADERS","STATUS","STATUS_TEXT","REQ_URL","RESPONSE_TYPE","CACHE_OPTIONS","ALLOWED_METHODS","shouldCacheRequest","req","options","isCacheActive","globalOptions","transferCache","requestOptions","method","requestMethod","includePostRequests","includes","includeRequestsWithAuthHeaders","hasAuthHeaders","filter","getHeadersToInclude","includeHeaders","globalHeaders","headersToInclude","retrieveStateFromCache","transferState","originMap","ngServerMode","RuntimeError","requestUrl","mapRequestOriginUrl","url","storeKey","makeCacheKey","response","get","undecodedBody","responseType","httpHeaders","status","statusText","body","fromBase64","Blob","headers","HttpHeaders","appendMissingHeadersDetection","HttpResponse","transferCacheInterceptorFn","next","inject","TransferState","optional","cachedResponse","of","event$","pipe","tap","event","set","toBase64","getFilteredHeaders","has","headersMap","key","values","getAll","sortAndConcatParams","params","keys","sort","map","k","join","request","mappedRequestUrl","encodedParams","serializedBody","serializeBody","URLSearchParams","hash","generateHash","makeStateKey","value","char","Math","imul","charCodeAt","toString","buffer","bytes","Uint8Array","CHUNK_SIZE","binaryString","i","length","chunk","subarray","String","fromCharCode","apply","btoa","base64","binary","atob","from","c","withHttpTransferCache","cacheOptions","provide","useFactory","performanceMarkFeature","HTTP_ROOT_INTERCEPTOR_FNS","useValue","multi","APP_BOOTSTRAP_LISTENER","appRef","ApplicationRef","cacheState","whenStable","then","warningProduced","Set","Proxy","target","prop","Reflect","methods","headerName","toLowerCase","add","truncatedUrl","truncateMiddle","console","warn","formatRuntimeError","origin","URL","mappedOrigin","verifyMappedOrigin","replace","pathname","httpResource","jsonFn","makeHttpResourceFn","arrayBuffer","blob","text","injector","assertInInjectionContext","Injector","getInitialStream","parsed","parse","signal","e","undefined","HttpResourceImpl","ctx","normalizeRequest","defaultValue","debugName","equal","unwrappedRequest","HttpParams","fromObject","HttpRequest","reportProgress","withCredentials","keepalive","cache","priority","mode","redirect","context","credentials","referrer","referrerPolicy","integrity","timeout","ResourceImpl","client","_headers","linkedSignal","source","extRequest","computation","_progress","_statusCode","computed","progress","asReadonly","statusCode","constructor","abortSignal","sub","onAbort","unsubscribe","addEventListener","stream","resolve","promise","Promise","r","send","subscribe","type","HttpEventType","Response","error","encapsulateResourceError","DownloadProgress","HttpErrorResponse","removeEventListener","complete","ɵRuntimeError","HttpClient"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -202,7 +202,7 @@ class MockPlatformLocation {
202
202
  }
203
203
  static ɵfac = i0.ɵɵngDeclareFactory({
204
204
  minVersion: "12.0.0",
205
- version: "21.2.0",
205
+ version: "22.0.0-next.0",
206
206
  ngImport: i0,
207
207
  type: MockPlatformLocation,
208
208
  deps: [{
@@ -213,14 +213,14 @@ class MockPlatformLocation {
213
213
  });
214
214
  static ɵprov = i0.ɵɵngDeclareInjectable({
215
215
  minVersion: "12.0.0",
216
- version: "21.2.0",
216
+ version: "22.0.0-next.0",
217
217
  ngImport: i0,
218
218
  type: MockPlatformLocation
219
219
  });
220
220
  }
221
221
  i0.ɵɵngDeclareClassMetadata({
222
222
  minVersion: "12.0.0",
223
- version: "21.2.0",
223
+ version: "22.0.0-next.0",
224
224
  ngImport: i0,
225
225
  type: MockPlatformLocation,
226
226
  decorators: [{
@@ -300,7 +300,7 @@ class FakeNavigationPlatformLocation {
300
300
  }
301
301
  static ɵfac = i0.ɵɵngDeclareFactory({
302
302
  minVersion: "12.0.0",
303
- version: "21.2.0",
303
+ version: "22.0.0-next.0",
304
304
  ngImport: i0,
305
305
  type: FakeNavigationPlatformLocation,
306
306
  deps: [],
@@ -308,14 +308,14 @@ class FakeNavigationPlatformLocation {
308
308
  });
309
309
  static ɵprov = i0.ɵɵngDeclareInjectable({
310
310
  minVersion: "12.0.0",
311
- version: "21.2.0",
311
+ version: "22.0.0-next.0",
312
312
  ngImport: i0,
313
313
  type: FakeNavigationPlatformLocation
314
314
  });
315
315
  }
316
316
  i0.ɵɵngDeclareClassMetadata({
317
317
  minVersion: "12.0.0",
318
- version: "21.2.0",
318
+ version: "22.0.0-next.0",
319
319
  ngImport: i0,
320
320
  type: FakeNavigationPlatformLocation,
321
321
  decorators: [{
@@ -501,7 +501,7 @@ class SpyLocation {
501
501
  }
502
502
  static ɵfac = i0.ɵɵngDeclareFactory({
503
503
  minVersion: "12.0.0",
504
- version: "21.2.0",
504
+ version: "22.0.0-next.0",
505
505
  ngImport: i0,
506
506
  type: SpyLocation,
507
507
  deps: [],
@@ -509,14 +509,14 @@ class SpyLocation {
509
509
  });
510
510
  static ɵprov = i0.ɵɵngDeclareInjectable({
511
511
  minVersion: "12.0.0",
512
- version: "21.2.0",
512
+ version: "22.0.0-next.0",
513
513
  ngImport: i0,
514
514
  type: SpyLocation
515
515
  });
516
516
  }
517
517
  i0.ɵɵngDeclareClassMetadata({
518
518
  minVersion: "12.0.0",
519
- version: "21.2.0",
519
+ version: "22.0.0-next.0",
520
520
  ngImport: i0,
521
521
  type: SpyLocation,
522
522
  decorators: [{
@@ -597,7 +597,7 @@ class MockLocationStrategy extends LocationStrategy {
597
597
  }
598
598
  static ɵfac = i0.ɵɵngDeclareFactory({
599
599
  minVersion: "12.0.0",
600
- version: "21.2.0",
600
+ version: "22.0.0-next.0",
601
601
  ngImport: i0,
602
602
  type: MockLocationStrategy,
603
603
  deps: [],
@@ -605,14 +605,14 @@ class MockLocationStrategy extends LocationStrategy {
605
605
  });
606
606
  static ɵprov = i0.ɵɵngDeclareInjectable({
607
607
  minVersion: "12.0.0",
608
- version: "21.2.0",
608
+ version: "22.0.0-next.0",
609
609
  ngImport: i0,
610
610
  type: MockLocationStrategy
611
611
  });
612
612
  }
613
613
  i0.ɵɵngDeclareClassMetadata({
614
614
  minVersion: "12.0.0",
615
- version: "21.2.0",
615
+ version: "22.0.0-next.0",
616
616
  ngImport: i0,
617
617
  type: MockLocationStrategy,
618
618
  decorators: [{
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -601,7 +601,7 @@ class LocationUpgradeModule {
601
601
  }
602
602
  static ɵfac = i0.ɵɵngDeclareFactory({
603
603
  minVersion: "12.0.0",
604
- version: "21.2.0",
604
+ version: "22.0.0-next.0",
605
605
  ngImport: i0,
606
606
  type: LocationUpgradeModule,
607
607
  deps: [],
@@ -609,14 +609,14 @@ class LocationUpgradeModule {
609
609
  });
610
610
  static ɵmod = i0.ɵɵngDeclareNgModule({
611
611
  minVersion: "14.0.0",
612
- version: "21.2.0",
612
+ version: "22.0.0-next.0",
613
613
  ngImport: i0,
614
614
  type: LocationUpgradeModule,
615
615
  imports: [CommonModule]
616
616
  });
617
617
  static ɵinj = i0.ɵɵngDeclareInjector({
618
618
  minVersion: "12.0.0",
619
- version: "21.2.0",
619
+ version: "22.0.0-next.0",
620
620
  ngImport: i0,
621
621
  type: LocationUpgradeModule,
622
622
  imports: [CommonModule]
@@ -624,7 +624,7 @@ class LocationUpgradeModule {
624
624
  }
625
625
  i0.ɵɵngDeclareClassMetadata({
626
626
  minVersion: "12.0.0",
627
- version: "21.2.0",
627
+ version: "22.0.0-next.0",
628
628
  ngImport: i0,
629
629
  type: LocationUpgradeModule,
630
630
  decorators: [{
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@angular/common",
3
- "version": "21.2.0",
3
+ "version": "22.0.0-next.0",
4
4
  "description": "Angular - commonly needed directives and services",
5
5
  "author": "angular",
6
6
  "license": "MIT",
7
7
  "engines": {
8
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
8
+ "node": "^22.22.0 || >=24.13.1"
9
9
  },
10
10
  "locales": "locales",
11
11
  "dependencies": {
@@ -44,7 +44,7 @@
44
44
  }
45
45
  },
46
46
  "peerDependencies": {
47
- "@angular/core": "21.2.0",
47
+ "@angular/core": "22.0.0-next.0",
48
48
  "rxjs": "^6.5.3 || ^7.4.0"
49
49
  },
50
50
  "repository": {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -381,7 +381,8 @@ declare class HttpRequest<T> {
381
381
  * Progress events are expensive (change detection runs on each event) and so
382
382
  * they should only be requested if the consumer intends to monitor them.
383
383
  *
384
- * Note: The `FetchBackend` doesn't support progress report on uploads.
384
+ * Note: The default `HttpBackend` based on fetch, does not support progress report for uploads.
385
+ * Set the `HttpXhrBackend` with `withXhr()` if you need this feature.
385
386
  */
386
387
  readonly reportProgress: boolean;
387
388
  /**
@@ -1081,6 +1082,9 @@ declare class HttpClientXsrfModule {
1081
1082
  * You can add interceptors to the chain behind `HttpClient` by binding them to the
1082
1083
  * multiprovider for built-in DI token `HTTP_INTERCEPTORS`.
1083
1084
  *
1085
+ * When importing the `HttpClientModule`, the `HttpBackend` is set to using the `HttpXhrBackend`.
1086
+ * If you want to use the `FetchBackend`, use `provideHttpClient` instead.
1087
+ *
1084
1088
  * @publicApi
1085
1089
  * @deprecated use `provideHttpClient(withInterceptorsFromDi())` as providers instead
1086
1090
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
package/types/common.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.2.0
2
+ * @license Angular v22.0.0-next.0
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */