From 4988094e7dff2c9879ca380dba7688ffc600851c Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 7 Nov 2019 11:45:01 -0800 Subject: [PATCH] fix(ivy): auto register NgModules with ID (#33663) PR Close #33663 --- packages/core/src/linker/ng_module_factory_registration.ts | 4 +++- packages/core/src/render3/definition.ts | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/core/src/linker/ng_module_factory_registration.ts b/packages/core/src/linker/ng_module_factory_registration.ts index a4a86d5570..78b7e61652 100644 --- a/packages/core/src/linker/ng_module_factory_registration.ts +++ b/packages/core/src/linker/ng_module_factory_registration.ts @@ -6,7 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ + import {Type} from '../interface/type'; +import {autoRegisterModuleById} from '../render3/definition'; import {NgModuleType} from '../render3/ng_module_ref'; import {stringify} from '../util/stringify'; @@ -68,5 +70,5 @@ export function restoreRegisteredModulesState(moduleMap: ModuleRegistrationMap) } export function getRegisteredNgModuleType(id: string) { - return modules.get(id); + return modules.get(id) || autoRegisterModuleById[id]; } diff --git a/packages/core/src/render3/definition.ts b/packages/core/src/render3/definition.ts index 94a413bd77..a51ff043c0 100644 --- a/packages/core/src/render3/definition.ts +++ b/packages/core/src/render3/definition.ts @@ -22,6 +22,7 @@ import {TConstants} from './interfaces/node'; // while SelectorFlags is unused here, it's required so that types don't get resolved lazily // see: https://github.com/Microsoft/web-build-tools/issues/1050 import {CssSelectorList, SelectorFlags} from './interfaces/projection'; +import {NgModuleType} from './ng_module_ref'; let _renderCompCount = 0; @@ -338,6 +339,8 @@ export function extractPipeDef(type: Type): PipeDef { return def !; } +export const autoRegisterModuleById: {[id: string]: NgModuleType} = {}; + /** * @codeGenApi */ @@ -376,6 +379,10 @@ export function ɵɵdefineNgModule(def: { schemas: def.schemas || null, id: def.id || null, }; + if (def.id != null) { + noSideEffects( + () => { autoRegisterModuleById[def.id !] = def.type as unknown as NgModuleType; }); + } return res as never; }