From 4aeec9fa7d2ce751c5d9f4f56543da5d94e43caa Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Wed, 26 Feb 2025 17:33:34 +0100 Subject: [PATCH] refactor(core): throw an Cyclic Dependency Error in prod mode (#60118) Prior to this change, cyclic injection didn't trigger any error in prod mode, resulting into injecting the `CIRCULAR` object. This could lead to strange errors where no method would be found on the token. fixes #60074 PR Close #60118 --- packages/core/src/di/r3_injector.ts | 2 +- .../bundling/animations-standalone/bundle.golden_symbols.json | 1 + .../core/test/bundling/animations/bundle.golden_symbols.json | 1 + .../core/test/bundling/cyclic_import/bundle.golden_symbols.json | 1 + packages/core/test/bundling/defer/bundle.golden_symbols.json | 1 + .../test/bundling/forms_reactive/bundle.golden_symbols.json | 1 + .../bundling/forms_template_driven/bundle.golden_symbols.json | 1 + .../core/test/bundling/hello_world/bundle.golden_symbols.json | 1 + .../core/test/bundling/hydration/bundle.golden_symbols.json | 1 + packages/core/test/bundling/router/bundle.golden_symbols.json | 1 + .../bundling/standalone_bootstrap/bundle.golden_symbols.json | 1 + packages/core/test/bundling/todo/bundle.golden_symbols.json | 1 + 12 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/src/di/r3_injector.ts b/packages/core/src/di/r3_injector.ts index 78a82a2d7c0..d3a7a249973 100644 --- a/packages/core/src/di/r3_injector.ts +++ b/packages/core/src/di/r3_injector.ts @@ -473,7 +473,7 @@ export class R3Injector extends EnvironmentInjector { private hydrate(token: ProviderToken, record: Record): T { const prevConsumer = setActiveConsumer(null); try { - if (ngDevMode && record.value === CIRCULAR) { + if (record.value === CIRCULAR) { throwCyclicDependencyError(stringify(token)); } else if (record.value === NOT_YET) { record.value = CIRCULAR; diff --git a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json index 07bb86c4015..acbb698fbd1 100644 --- a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json @@ -478,6 +478,7 @@ "stringify", "stringifyCSSSelector", "style", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "transition", diff --git a/packages/core/test/bundling/animations/bundle.golden_symbols.json b/packages/core/test/bundling/animations/bundle.golden_symbols.json index bbfce89db39..ac9371dc2ad 100644 --- a/packages/core/test/bundling/animations/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations/bundle.golden_symbols.json @@ -504,6 +504,7 @@ "stringify", "stringifyCSSSelector", "style", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "transition", diff --git a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json index 31904f30c40..ec6c5c7c3ac 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -410,6 +410,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "uniqueIdCounter", diff --git a/packages/core/test/bundling/defer/bundle.golden_symbols.json b/packages/core/test/bundling/defer/bundle.golden_symbols.json index c72b0e50078..2ddd23e025d 100644 --- a/packages/core/test/bundling/defer/bundle.golden_symbols.json +++ b/packages/core/test/bundling/defer/bundle.golden_symbols.json @@ -881,6 +881,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "trackMovedView", 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 0e2179c677a..b3c7e83ce11 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -613,6 +613,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwInvalidWriteToSignalError", "throwInvalidWriteToSignalErrorFn", "throwProviderNotFoundError", 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 7a91ed45e15..0134488c556 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 @@ -606,6 +606,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwInvalidWriteToSignalError", "throwInvalidWriteToSignalErrorFn", "throwProviderNotFoundError", diff --git a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json index be8e3353c4e..459b2a1a815 100644 --- a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json @@ -332,6 +332,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "uniqueIdCounter", diff --git a/packages/core/test/bundling/hydration/bundle.golden_symbols.json b/packages/core/test/bundling/hydration/bundle.golden_symbols.json index 193dd8e4944..f0fab949f6d 100644 --- a/packages/core/test/bundling/hydration/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hydration/bundle.golden_symbols.json @@ -442,6 +442,7 @@ "stringify", "stringifyCSSSelector", "subscribeOn", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "transferCacheInterceptorFn", diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index 2be8fa88239..e722ca67070 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -703,6 +703,7 @@ "take", "takeLast", "tap", + "throwCyclicDependencyError", "throwError2", "throwIfEmpty", "throwInvalidWriteToSignalErrorFn", diff --git a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json index 9b25bf1d176..d419b334f15 100644 --- a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json +++ b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json @@ -367,6 +367,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "uniqueIdCounter", diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index b5147e9f816..1e1dee8a510 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -490,6 +490,7 @@ "storeLViewOnDestroy", "stringify", "stringifyCSSSelector", + "throwCyclicDependencyError", "throwProviderNotFoundError", "timeoutProvider", "toTStylingRange",