From a39e78626d97a128ba2473f8ba54ac7066b9ee47 Mon Sep 17 00:00:00 2001 From: Sonu Kapoor Date: Thu, 27 Aug 2020 08:40:19 -0400 Subject: [PATCH] perf: use `ngDevMode` to tree-shake error messages This commit adds a guard before throwing any errors from the `r3_injector`. This will tree-shake error messages which cannot be minified. --- packages/core/src/di/r3_injector.ts | 8 +++---- .../core/src/render3/instructions/shared.ts | 22 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/core/src/di/r3_injector.ts b/packages/core/src/di/r3_injector.ts index ad9dd00b1cd412..449f88f15daa70 100644 --- a/packages/core/src/di/r3_injector.ts +++ b/packages/core/src/di/r3_injector.ts @@ -384,7 +384,7 @@ export class R3Injector { let multiRecord = this.records.get(token); if (multiRecord) { // It has. Throw a nice error if - if (multiRecord.multi === undefined) { + if (ngDevMode && multiRecord.multi === undefined) { throwMixedMultiProviderError(); } } else { @@ -396,7 +396,7 @@ export class R3Injector { multiRecord.multi!.push(provider); } else { const existing = this.records.get(token); - if (existing && existing.multi !== undefined) { + if (ngDevMode && existing && existing.multi !== undefined) { throwMixedMultiProviderError(); } } @@ -404,7 +404,7 @@ export class R3Injector { } private hydrate(token: Type|InjectionToken, record: Record): T { - if (record.value === CIRCULAR) { + if (ngDevMode && record.value === CIRCULAR) { throwCyclicDependencyError(stringify(token)); } else if (record.value === NOT_YET) { record.value = CIRCULAR; @@ -511,7 +511,7 @@ export function providerToFactory( const classRef = resolveForwardRef( provider && ((provider as StaticClassProvider | ClassProvider).useClass || provider.provide)); - if (!classRef) { + if (ngDevMode && !classRef) { throwInvalidProviderError(ngModuleType, providers, provider); } if (hasDeps(provider)) { diff --git a/packages/core/src/render3/instructions/shared.ts b/packages/core/src/render3/instructions/shared.ts index 4addb1e83bb428..6622980039be69 100644 --- a/packages/core/src/render3/instructions/shared.ts +++ b/packages/core/src/render3/instructions/shared.ts @@ -1375,6 +1375,7 @@ function findDirectiveDefMatches( ngDevMode && assertNodeOfPossibleTypes( tNode, [TNodeType.Element, TNodeType.ElementContainer, TNodeType.Container]); + const registry = tView.directiveRegistry; let matches: any[]|null = null; if (registry) { @@ -1385,16 +1386,17 @@ function findDirectiveDefMatches( diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, viewData), tView, def.type); if (isComponentDef(def)) { - ngDevMode && - assertNodeOfPossibleTypes( - tNode, [TNodeType.Element], - `"${tNode.tagName}" tags cannot be used as component hosts. ` + - `Please use a different tag to activate the ${ - stringify(def.type)} component.`); - if (tNode.flags & TNodeFlags.isComponentHost) throwMultipleComponentError(tNode); - markAsComponentHost(tView, tNode); - // The component is always stored first with directives after. - matches.unshift(def); + if (ngDevMode) { + assertNodeOfPossibleTypes( + tNode, [TNodeType.Element], + `"${tNode.tagName}" tags cannot be used as component hosts. ` + + `Please use a different tag to activate the ${stringify(def.type)} component.`); + + if (tNode.flags & TNodeFlags.isComponentHost) throwMultipleComponentError(tNode); + markAsComponentHost(tView, tNode); + // The component is always stored first with directives after. + matches.unshift(def); + } } else { matches.push(def); }