MCPcopy Create free account
hub / github.com/angular/angular / DeferredBlock

Class DeferredBlock

packages/compiler/src/render3/r3_ast.ts:372–432  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

370}
371
372export class DeferredBlock extends BlockNode implements Node {
373 readonly triggers: Readonly<DeferredBlockTriggers>;
374 readonly prefetchTriggers: Readonly<DeferredBlockTriggers>;
375 readonly hydrateTriggers: Readonly<DeferredBlockTriggers>;
376 private readonly definedTriggers: (keyof DeferredBlockTriggers)[];
377 private readonly definedPrefetchTriggers: (keyof DeferredBlockTriggers)[];
378 private readonly definedHydrateTriggers: (keyof DeferredBlockTriggers)[];
379
380 constructor(
381 public children: Node[],
382 triggers: DeferredBlockTriggers,
383 prefetchTriggers: DeferredBlockTriggers,
384 hydrateTriggers: DeferredBlockTriggers,
385 public placeholder: DeferredBlockPlaceholder | null,
386 public loading: DeferredBlockLoading | null,
387 public error: DeferredBlockError | null,
388 nameSpan: ParseSourceSpan,
389 sourceSpan: ParseSourceSpan,
390 public mainBlockSpan: ParseSourceSpan,
391 startSourceSpan: ParseSourceSpan,
392 endSourceSpan: ParseSourceSpan | null,
393 public i18n?: I18nMeta,
394 ) {
395 super(nameSpan, sourceSpan, startSourceSpan, endSourceSpan);
396 this.triggers = triggers;
397 this.prefetchTriggers = prefetchTriggers;
398 this.hydrateTriggers = hydrateTriggers;
399 // We cache the keys since we know that they won't change and we
400 // don't want to enumarate them every time we're traversing the AST.
401 this.definedTriggers = Object.keys(triggers) as (keyof DeferredBlockTriggers)[];
402 this.definedPrefetchTriggers = Object.keys(prefetchTriggers) as (keyof DeferredBlockTriggers)[];
403 this.definedHydrateTriggers = Object.keys(hydrateTriggers) as (keyof DeferredBlockTriggers)[];
404 }
405
406 visit<Result>(visitor: Visitor<Result>): Result {
407 return visitor.visitDeferredBlock(this);
408 }
409
410 visitAll(visitor: Visitor<unknown>): void {
411 // Visit the hydrate triggers first to match their insertion order.
412 this.visitTriggers(this.definedHydrateTriggers, this.hydrateTriggers, visitor);
413 this.visitTriggers(this.definedTriggers, this.triggers, visitor);
414 this.visitTriggers(this.definedPrefetchTriggers, this.prefetchTriggers, visitor);
415 visitAll(visitor, this.children);
416 const remainingBlocks = [this.placeholder, this.loading, this.error].filter(
417 (x) => x !== null,
418 ) as Array<Node>;
419 visitAll(visitor, remainingBlocks);
420 }
421
422 private visitTriggers(
423 keys: (keyof DeferredBlockTriggers)[],
424 triggers: DeferredBlockTriggers,
425 visitor: Visitor,
426 ) {
427 visitAll(
428 visitor,
429 keys.map((k) => triggers[k]!),

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected