@@ -2,77 +2,56 @@ import {
2
2
Injectable ,
3
3
Compiler ,
4
4
NgModuleFactory ,
5
- NgModuleFactoryLoader
5
+ NgModuleFactoryLoader ,
6
+ SystemJsNgModuleLoader ,
6
7
} from "@angular/core" ;
7
8
8
9
import { path , knownFolders } from "file-system" ;
9
10
10
- declare var System : any ;
11
11
const SEPARATOR = "#" ;
12
- const FACTORY_CLASS_SUFFIX = "NgFactory" ;
13
- const FACTORY_PATH_SUFFIX = ".ngfactory" ;
14
12
15
13
@Injectable ( )
16
14
export class NSModuleFactoryLoader implements NgModuleFactoryLoader {
17
15
private offlineMode : boolean ;
18
16
19
- constructor ( private compiler : Compiler ) {
17
+ constructor ( private compiler : Compiler , private ngModuleLoader : SystemJsNgModuleLoader ) {
20
18
this . offlineMode = compiler instanceof Compiler ;
21
19
}
22
20
23
21
load ( path : string ) : Promise < NgModuleFactory < any > > {
24
- let { modulePath, exportName} = this . splitPath ( path ) ;
25
-
26
22
if ( this . offlineMode ) {
27
- return this . loadFactory ( modulePath , exportName ) ;
23
+ return this . ngModuleLoader . load ( path ) ;
28
24
} else {
29
- return this . loadAndCompile ( modulePath , exportName ) ;
25
+ return this . loadAndCompile ( path ) ;
30
26
}
31
27
}
32
28
33
- private loadFactory ( modulePath : string , exportName : string ) : Promise < NgModuleFactory < any > > {
34
- modulePath = factoryModulePath ( modulePath ) ;
35
- exportName = factoryExportName ( exportName ) ;
36
-
37
- return System . import ( modulePath )
38
- . then ( ( module : any ) => module [ exportName ] )
39
- . then ( ( factory : any ) => checkNotEmpty ( factory , modulePath , exportName ) ) ;
40
- }
41
-
42
- private loadAndCompile ( modulePath : string , exportName : string ) : Promise < NgModuleFactory < any > > {
43
- modulePath = getAbsolutePath ( modulePath ) ;
29
+ private loadAndCompile ( path : string ) : Promise < NgModuleFactory < any > > {
30
+ let { modulePath, exportName} = splitPath ( path ) ;
44
31
45
32
let loadedModule = global . require ( modulePath ) [ exportName ] ;
46
33
checkNotEmpty ( loadedModule , modulePath , exportName ) ;
47
34
48
35
return Promise . resolve ( this . compiler . compileModuleAsync ( loadedModule ) ) ;
49
36
}
50
37
51
- private splitPath ( path : string ) : { modulePath : string , exportName : string } {
52
- let [ modulePath , exportName ] = path . split ( SEPARATOR ) ;
38
+ }
53
39
54
- if ( typeof exportName === "undefined" ) {
55
- exportName = "default" ;
56
- }
40
+ function splitPath ( path : string ) : { modulePath : string , exportName : string } {
41
+ let [ modulePath , exportName ] = path . split ( SEPARATOR ) ;
42
+ modulePath = getAbsolutePath ( modulePath ) ;
57
43
58
- return { modulePath, exportName} ;
44
+ if ( typeof exportName === "undefined" ) {
45
+ exportName = "default" ;
59
46
}
47
+
48
+ return { modulePath, exportName} ;
60
49
}
61
50
62
51
function getAbsolutePath ( relativePath : string ) {
63
52
return path . normalize ( path . join ( knownFolders . currentApp ( ) . path , relativePath ) ) ;
64
53
}
65
54
66
- function factoryModulePath ( modulePath ) {
67
- return `${ modulePath } ${ FACTORY_PATH_SUFFIX } ` ;
68
- }
69
-
70
- function factoryExportName ( exportName ) {
71
- return exportName === "default" ?
72
- exportName :
73
- `${ exportName } ${ FACTORY_CLASS_SUFFIX } ` ;
74
- }
75
-
76
55
function checkNotEmpty ( value : any , modulePath : string , exportName : string ) : any {
77
56
if ( ! value ) {
78
57
throw new Error ( `Cannot find '${ exportName } ' in '${ modulePath } '` ) ;
0 commit comments