From fd968e80ebd85dbbfc37c818b7d564e099677100 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 17 Dec 2024 20:31:18 +0000 Subject: [PATCH] refactor(core): reduce generated code (#59220) This commit updates the defer code promises to reduce a couple of bytes. PR Close #59220 --- packages/core/src/defer/triggering.ts | 35 ++++++++++++--------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/packages/core/src/defer/triggering.ts b/packages/core/src/defer/triggering.ts index 02965097d0b..636250f78c9 100644 --- a/packages/core/src/defer/triggering.ts +++ b/packages/core/src/defer/triggering.ts @@ -444,35 +444,32 @@ function populateHydratingStateForQueue(registry: DehydratedBlockRegistry, queue // Waits for the next render cycle to complete function nextRender(injector: Injector): Promise { - let resolve: VoidFunction; - const promise = new Promise((resolveFn) => { - resolve = resolveFn; - }); - afterNextRender(() => resolve(), {injector}); - return promise; + return new Promise((resolveFn) => afterNextRender(resolveFn, {injector})); } -function triggerResourceLoadingForHydration( +async function triggerResourceLoadingForHydration( dehydratedBlockId: string, dehydratedBlockRegistry: DehydratedBlockRegistry, -) { - let resolve: Function; - const promise = new Promise((resolveFn) => (resolve = resolveFn)); +): Promise { const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId); // Since we trigger hydration for nested defer blocks in a sequence (parent -> child), // there is a chance that a defer block may not be present at hydration time. For example, // when a nested block was in an `@if` condition, which has changed. - if (deferBlock !== null) { - const {tNode, lView} = deferBlock; - const lDetails = getLDeferBlockDetails(lView, tNode); - onDeferBlockCompletion(lDetails, () => resolve()); - triggerDeferBlock(TriggerType.Hydrate, lView, tNode); - + if (deferBlock === null) { // TODO(incremental-hydration): handle the cleanup for cases when // defer block is no longer present during hydration (e.g. `@if` condition // has changed during hydration/rendering). + + return; } - return promise; + + const {tNode, lView} = deferBlock; + const lDetails = getLDeferBlockDetails(lView, tNode); + + return new Promise((resolve) => { + onDeferBlockCompletion(lDetails, resolve); + triggerDeferBlock(TriggerType.Hydrate, lView, tNode); + }); } /** @@ -490,7 +487,7 @@ function onDeferBlockCompletion(lDetails: LDeferBlockDetails, callback: VoidFunc * Determines whether specific trigger types should be attached during an instruction firing * to ensure the proper triggers for a given type are used. */ -export function shouldAttachTrigger(triggerType: TriggerType, lView: LView, tNode: TNode) { +export function shouldAttachTrigger(triggerType: TriggerType, lView: LView, tNode: TNode): boolean { if (triggerType === TriggerType.Regular) { return shouldAttachRegularTrigger(lView, tNode); } else if (triggerType === TriggerType.Hydrate) { @@ -506,7 +503,7 @@ export function shouldAttachTrigger(triggerType: TriggerType, lView: LView, tNod * `deferOn*` and `deferHydrateOn*` triggers, to make sure only one of the trigger * types is active for a block with the current state. */ -function shouldAttachRegularTrigger(lView: LView, tNode: TNode) { +function shouldAttachRegularTrigger(lView: LView, tNode: TNode): boolean { const injector = lView[INJECTOR]; const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);