From 2d3a689660c1af5d7ecce33ea0bd72a04eee748a Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 22 Oct 2024 08:56:51 +0000 Subject: [PATCH] =?UTF-8?q?refactor(core):=20eliminate=20top-level=20prope?= =?UTF-8?q?rty=20access=20in=20`=C9=B5=C9=B5NgOnChangesFeature`=20(#58297)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Top-level property access was causing dead code elimination (DCE) and tree-shaking issues. This commit modifies `ɵɵNgOnChangesFeature` to prevent these bailouts. PR Close #58297 --- .../render3/features/ng_onchanges_feature.ts | 19 ++++++++++--------- .../forms_reactive/bundle.golden_symbols.json | 3 +++ .../bundle.golden_symbols.json | 3 +++ .../router/bundle.golden_symbols.json | 3 +++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/core/src/render3/features/ng_onchanges_feature.ts b/packages/core/src/render3/features/ng_onchanges_feature.ts index 62b5ba6709a..636cd78c062 100644 --- a/packages/core/src/render3/features/ng_onchanges_feature.ts +++ b/packages/core/src/render3/features/ng_onchanges_feature.ts @@ -36,9 +36,16 @@ import {DirectiveDef, DirectiveDefFeature} from '../interfaces/definition'; * * @codeGenApi */ -export function ɵɵNgOnChangesFeature(): DirectiveDefFeature { - return NgOnChangesFeatureImpl; -} +export const ɵɵNgOnChangesFeature: () => DirectiveDefFeature = /* @__PURE__ */ (() => { + const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl; + + // This option ensures that the ngOnChanges lifecycle hook will be inherited + // from superclasses (in InheritDefinitionFeature). + /** @nocollapse */ + ɵɵNgOnChangesFeatureImpl.ngInherit = true; + + return ɵɵNgOnChangesFeatureImpl; +})(); export function NgOnChangesFeatureImpl(definition: DirectiveDef) { if (definition.type.prototype.ngOnChanges) { @@ -47,12 +54,6 @@ export function NgOnChangesFeatureImpl(definition: DirectiveDef) { return rememberChangeHistoryAndInvokeOnChangesHook; } -// This option ensures that the ngOnChanges lifecycle hook will be inherited -// from superclasses (in InheritDefinitionFeature). -/** @nocollapse */ -// tslint:disable-next-line:no-toplevel-property-access -(ɵɵNgOnChangesFeature as DirectiveDefFeature).ngInherit = true; - /** * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate * `ngOnChanges`. diff --git a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json index adb204a5386..f564737ae5f 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -434,6 +434,9 @@ { "name": "NgModuleRef2" }, + { + "name": "NgOnChangesFeatureImpl" + }, { "name": "NgZone" }, diff --git a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json index d9b7adc2ebb..4607da7f952 100644 --- a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json @@ -419,6 +419,9 @@ { "name": "NgModuleRef2" }, + { + "name": "NgOnChangesFeatureImpl" + }, { "name": "NgZone" }, diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index beb01ca95c3..c706459a367 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -455,6 +455,9 @@ { "name": "NgModuleRef2" }, + { + "name": "NgOnChangesFeatureImpl" + }, { "name": "NgZone" },