From 17510becb0f50a02ecae9757d2fb2596fb2fb02c Mon Sep 17 00:00:00 2001 From: arturovt Date: Tue, 7 Jan 2025 19:18:57 +0200 Subject: [PATCH] refactor(platform-browser): drop `BROWSER_MODULE_PROVIDERS_MARKER` in production (#59412) In this commit, we switch from decorators (which also produce redundant metadata, such as in the `declareFactory` instruction) to the `inject` function to drop the `BROWSER_MODULE_PROVIDERS_MARKER` token in production. This token is actually provided only in development mode but is still referenced in the constructor due to the `@Inject(BROWSER_MODULE_PROVIDERS_MARKER)` decorator. PR Close #59412 --- .../public-api/platform-browser/index.api.md | 4 +-- .../animations/bundle.golden_symbols.json | 1 - .../cyclic_import/bundle.golden_symbols.json | 1 - .../forms_reactive/bundle.golden_symbols.json | 1 - .../bundle.golden_symbols.json | 1 - .../bundling/todo/bundle.golden_symbols.json | 1 - packages/platform-browser/src/browser.ts | 32 +++++++++---------- 7 files changed, 17 insertions(+), 24 deletions(-) diff --git a/goldens/public-api/platform-browser/index.api.md b/goldens/public-api/platform-browser/index.api.md index 2b6b6a09006..5cd1b53f014 100644 --- a/goldens/public-api/platform-browser/index.api.md +++ b/goldens/public-api/platform-browser/index.api.md @@ -33,9 +33,9 @@ export function bootstrapApplication(rootComponent: Type, options?: App // @public export class BrowserModule { - constructor(providersAlreadyPresent: boolean | null); + constructor(); // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: i0.ɵɵFactoryDeclaration; // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) diff --git a/packages/core/test/bundling/animations/bundle.golden_symbols.json b/packages/core/test/bundling/animations/bundle.golden_symbols.json index 740e55719b0..a5b95521303 100644 --- a/packages/core/test/bundling/animations/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations/bundle.golden_symbols.json @@ -28,7 +28,6 @@ "ApplicationRef", "BROWSER_ANIMATIONS_PROVIDERS", "BROWSER_MODULE_PROVIDERS", - "BROWSER_MODULE_PROVIDERS_MARKER", "BROWSER_NOOP_ANIMATIONS_PROVIDERS", "BaseAnimationRenderer", "BehaviorSubject", 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 3b4ffbb5600..74f1193c5e0 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -9,7 +9,6 @@ "ApplicationModule", "ApplicationRef", "BROWSER_MODULE_PROVIDERS", - "BROWSER_MODULE_PROVIDERS_MARKER", "BehaviorSubject", "BrowserDomAdapter", "BrowserModule", 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 3d4ae74ec6f..f72f5eb32e5 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -13,7 +13,6 @@ "ApplicationModule", "ApplicationRef", "BROWSER_MODULE_PROVIDERS", - "BROWSER_MODULE_PROVIDERS_MARKER", "BaseControlValueAccessor", "BehaviorSubject", "BrowserDomAdapter", 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 5725362e1cc..9fd6584ca4c 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 @@ -14,7 +14,6 @@ "ApplicationModule", "ApplicationRef", "BROWSER_MODULE_PROVIDERS", - "BROWSER_MODULE_PROVIDERS_MARKER", "BaseControlValueAccessor", "BehaviorSubject", "BrowserDomAdapter", diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index 60c9fcaffd3..d2c8cc77d00 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -9,7 +9,6 @@ "ApplicationModule", "ApplicationRef", "BROWSER_MODULE_PROVIDERS", - "BROWSER_MODULE_PROVIDERS_MARKER", "BehaviorSubject", "BrowserDomAdapter", "BrowserModule", diff --git a/packages/platform-browser/src/browser.ts b/packages/platform-browser/src/browser.ts index 5e489398e2b..6b924de7261 100644 --- a/packages/platform-browser/src/browser.ts +++ b/packages/platform-browser/src/browser.ts @@ -13,25 +13,20 @@ import { ɵPLATFORM_BROWSER_ID as PLATFORM_BROWSER_ID, } from '@angular/common'; import { - APP_ID, ApplicationConfig as ApplicationConfigFromCore, ApplicationModule, ApplicationRef, createPlatformFactory, ErrorHandler, - Inject, InjectionToken, - ModuleWithProviders, NgModule, NgZone, - Optional, PLATFORM_ID, PLATFORM_INITIALIZER, platformCore, PlatformRef, Provider, RendererFactory2, - SkipSelf, StaticProvider, Testability, TestabilityRegistry, @@ -42,6 +37,7 @@ import { ɵsetDocument, ɵTESTABILITY as TESTABILITY, ɵTESTABILITY_GETTER as TESTABILITY_GETTER, + inject, } from '@angular/core'; import {BrowserDomAdapter} from './browser/browser_adapter'; @@ -264,18 +260,20 @@ const BROWSER_MODULE_PROVIDERS: Provider[] = [ exports: [CommonModule, ApplicationModule], }) export class BrowserModule { - constructor( - @Optional() - @SkipSelf() - @Inject(BROWSER_MODULE_PROVIDERS_MARKER) - providersAlreadyPresent: boolean | null, - ) { - if ((typeof ngDevMode === 'undefined' || ngDevMode) && providersAlreadyPresent) { - throw new RuntimeError( - RuntimeErrorCode.BROWSER_MODULE_ALREADY_LOADED, - `Providers from the \`BrowserModule\` have already been loaded. If you need access ` + - `to common directives such as NgIf and NgFor, import the \`CommonModule\` instead.`, - ); + constructor() { + if (typeof ngDevMode === 'undefined' || ngDevMode) { + const providersAlreadyPresent = inject(BROWSER_MODULE_PROVIDERS_MARKER, { + optional: true, + skipSelf: true, + }); + + if (providersAlreadyPresent) { + throw new RuntimeError( + RuntimeErrorCode.BROWSER_MODULE_ALREADY_LOADED, + `Providers from the \`BrowserModule\` have already been loaded. If you need access ` + + `to common directives such as NgIf and NgFor, import the \`CommonModule\` instead.`, + ); + } } } }