* Shared implementation for `afterEveryRender` and `afterNextRender`.
(
callbackOrSpec:
| VoidFunction
| {
earlyRead?: () => unknown;
write?: (r?: unknown) => unknown;
mixedReadWrite?: (r?: unknown) => unknown;
read?: (r?: unknown) => void;
},
injector: Injector,
options: AfterRenderOptions | undefined,
once: boolean,
)
| 433 | * Shared implementation for `afterEveryRender` and `afterNextRender`. |
| 434 | */ |
| 435 | function afterEveryRenderImpl( |
| 436 | callbackOrSpec: |
| 437 | | VoidFunction |
| 438 | | { |
| 439 | earlyRead?: () => unknown; |
| 440 | write?: (r?: unknown) => unknown; |
| 441 | mixedReadWrite?: (r?: unknown) => unknown; |
| 442 | read?: (r?: unknown) => void; |
| 443 | }, |
| 444 | injector: Injector, |
| 445 | options: AfterRenderOptions | undefined, |
| 446 | once: boolean, |
| 447 | ): AfterRenderRef { |
| 448 | const manager = injector.get(AfterRenderManager); |
| 449 | // Lazily initialize the handler implementation, if necessary. This is so that it can be |
| 450 | // tree-shaken if `afterEveryRender` and `afterNextRender` aren't used. |
| 451 | manager.impl ??= injector.get(AfterRenderImpl); |
| 452 | |
| 453 | const tracing = injector.get(TracingService, null, {optional: true}); |
| 454 | |
| 455 | const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null; |
| 456 | const viewContext = injector.get(ViewContext, null, {optional: true}); |
| 457 | const sequence = new AfterRenderSequence( |
| 458 | manager.impl, |
| 459 | getHooks(callbackOrSpec), |
| 460 | viewContext?.view, |
| 461 | once, |
| 462 | destroyRef, |
| 463 | tracing?.snapshot(null), |
| 464 | ); |
| 465 | manager.impl.register(sequence); |
| 466 | return sequence; |
| 467 | } |
| 468 | |
| 469 | /** `AfterRenderRef` that does nothing. */ |
| 470 | export const NOOP_AFTER_RENDER_REF: AfterRenderRef = { |
no test coverage detected
searching dependent graphs…