import { Compiler , Injectable , NgModuleFactory } from '@angular/core' ; /**
 * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
 */ @ Injectable ( ) export class NgModuleLoader { constructor ( private _compiler ) { } load ( modulePath , ngModuleExport ) { const offlineMode = this . _compiler instanceof Compiler ; return offlineMode ? loadPrecompiledFactory ( modulePath , ngModuleExport ) : loadAndCompile ( this . _compiler , modulePath , ngModuleExport ) ; } } function loadAndCompile ( compiler , modulePath , ngModuleExport ) { if ( ! ngModuleExport ) { ngModuleExport = 'default' ; } return System . import ( modulePath ) . then ( ( rawModule ) => { const module = rawModule [ ngModuleExport ] ; if ( ! module ) { throw new Error ( `Module ${ modulePath } does not export ${ ngModuleExport }` ) ; } return compiler . compileModuleAsync ( module ) ; } ) ; } function loadPrecompiledFactory ( modulePath , ngModuleExport ) { return System . import ( modulePath ) . then ( ( rawModule ) => { const ngModuleFactory = rawModule [ ngModuleExport ] ; if ( ! ngModuleFactory ) { throw new Error ( `Module ${ modulePath } does not export ${ ngModuleExport }` ) ; } return ngModuleFactory ; } ) ; }