MCPcopy
hub / github.com/angular/angular / DeferredBlock

Class DeferredBlock

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

Source from the content-addressed store, hash-verified

351}
352
353export class DeferredBlock extends BlockNode implements Node {
354 readonly triggers: Readonly<DeferredBlockTriggers>;
355 readonly prefetchTriggers: Readonly<DeferredBlockTriggers>;
356 readonly hydrateTriggers: Readonly<DeferredBlockTriggers>;
357 private readonly definedTriggers: (keyof DeferredBlockTriggers)[];
358 private readonly definedPrefetchTriggers: (keyof DeferredBlockTriggers)[];
359 private readonly definedHydrateTriggers: (keyof DeferredBlockTriggers)[];
360
361 constructor(
362 public children: Node[],
363 triggers: DeferredBlockTriggers,
364 prefetchTriggers: DeferredBlockTriggers,
365 hydrateTriggers: DeferredBlockTriggers,
366 public placeholder: DeferredBlockPlaceholder | null,
367 public loading: DeferredBlockLoading | null,
368 public error: DeferredBlockError | null,
369 nameSpan: ParseSourceSpan,
370 sourceSpan: ParseSourceSpan,
371 public mainBlockSpan: ParseSourceSpan,
372 startSourceSpan: ParseSourceSpan,
373 endSourceSpan: ParseSourceSpan | null,
374 public i18n?: I18nMeta,
375 ) {
376 super(nameSpan, sourceSpan, startSourceSpan, endSourceSpan);
377 this.triggers = triggers;
378 this.prefetchTriggers = prefetchTriggers;
379 this.hydrateTriggers = hydrateTriggers;
380 // We cache the keys since we know that they won't change and we
381 // don't want to enumarate them every time we're traversing the AST.
382 this.definedTriggers = Object.keys(triggers) as (keyof DeferredBlockTriggers)[];
383 this.definedPrefetchTriggers = Object.keys(prefetchTriggers) as (keyof DeferredBlockTriggers)[];
384 this.definedHydrateTriggers = Object.keys(hydrateTriggers) as (keyof DeferredBlockTriggers)[];
385 }
386
387 visit<Result>(visitor: Visitor<Result>): Result {
388 return visitor.visitDeferredBlock(this);
389 }
390
391 visitAll(visitor: Visitor<unknown>): void {
392 // Visit the hydrate triggers first to match their insertion order.
393 this.visitTriggers(this.definedHydrateTriggers, this.hydrateTriggers, visitor);
394 this.visitTriggers(this.definedTriggers, this.triggers, visitor);
395 this.visitTriggers(this.definedPrefetchTriggers, this.prefetchTriggers, visitor);
396 visitAll(visitor, this.children);
397 const remainingBlocks = [this.placeholder, this.loading, this.error].filter(
398 (x) => x !== null,
399 ) as Array<Node>;
400 visitAll(visitor, remainingBlocks);
401 }
402
403 private visitTriggers(
404 keys: (keyof DeferredBlockTriggers)[],
405 triggers: DeferredBlockTriggers,
406 visitor: Visitor,
407 ) {
408 visitAll(
409 visitor,
410 keys.map((k) => triggers[k]!),

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…