MCPcopy Index your code
hub / github.com/angular/angular / constructor

Method constructor

packages/common/http/src/resource.ts:360–451  ·  view source on GitHub ↗
(
    injector: Injector,
    request: (ctx: ResourceParamsContext) => HttpRequest<T> | undefined,
    defaultValue: T,
    debugName?: string,
    parse?: (value: unknown) => T,
    equal?: ValueEqualityFn<unknown>,
    getInitialStream?: (
      request: HttpRequest<unknown> | undefined,
    ) => Signal<ResourceStreamItem<T>> | undefined,
  )

Source from the content-addressed store, hash-verified

358 readonly statusCode = this._statusCode.asReadonly();
359
360 constructor(
361 injector: Injector,
362 request: (ctx: ResourceParamsContext) => HttpRequest<T> | undefined,
363 defaultValue: T,
364 debugName?: string,
365 parse?: (value: unknown) => T,
366 equal?: ValueEqualityFn<unknown>,
367 getInitialStream?: (
368 request: HttpRequest<unknown> | undefined,
369 ) => Signal<ResourceStreamItem<T>> | undefined,
370 ) {
371 super(
372 request,
373 ({params: request, abortSignal}) => {
374 let sub: Subscription | undefined;
375 // In the unlikely case the request returns synchronously we want to make sure the observable
376 // is subscribe even if it isn't initialized yet.
377 let aborted = false;
378
379 // Track the abort listener so it can be removed if the Observable completes (as a memory
380 // optimization).
381 const onAbort = () => {
382 aborted = true;
383 sub?.unsubscribe();
384 };
385 abortSignal.addEventListener('abort', onAbort);
386
387 // Start off stream as undefined.
388 const stream = signal<ResourceStreamItem<T>>({value: undefined as T});
389 let resolve: ((value: Signal<ResourceStreamItem<T>>) => void) | undefined;
390 const promise = new Promise<Signal<ResourceStreamItem<T>>>((r) => (resolve = r));
391
392 const send = (value: ResourceStreamItem<T>): void => {
393 stream.set(value);
394 resolve?.(stream);
395 resolve = undefined;
396 };
397
398 sub = this.client.request(request!).subscribe({
399 next: (event) => {
400 switch (event.type) {
401 case HttpEventType.Response:
402 this._headers.set(event.headers);
403 this._statusCode.set(event.status);
404 try {
405 send({value: parse ? parse(event.body) : (event.body as T)});
406 } catch (error) {
407 send({error: encapsulateResourceError(error)});
408 }
409 break;
410 case HttpEventType.DownloadProgress:
411 this._progress.set(event);
412 break;
413 }
414 },
415 error: (error) => {
416 if (error instanceof HttpErrorResponse) {
417 this._headers.set(error.headers);

Callers

nothing calls this directly

Calls 11

signalFunction · 0.90
sendFunction · 0.85
encapsulateResourceErrorFunction · 0.85
addEventListenerMethod · 0.65
subscribeMethod · 0.65
setMethod · 0.65
removeEventListenerMethod · 0.65
unsubscribeMethod · 0.65
getMethod · 0.65
parseFunction · 0.50
requestMethod · 0.45

Tested by

no test coverage detected