12
12
13
13
var path = require ( 'path' ) ;
14
14
var diveSync = require ( 'diveSync' ) ;
15
- var engineMatcher = / ^ e n g i n e _ ( .* ) \. j s / ;
16
- var enginesDirectory = __dirname ;
17
-
15
+ var engineMatcher = / ^ p a t t e r n e n g i n e - n o d e - ( .* ) $ / ;
16
+ var enginesDirectory = path . join ( process . cwd ( ) , 'node_modules' ) ;
18
17
var PatternEngines ; // the main export object
19
18
var engineNameForExtension ; // generated mapping of extension to engine name
20
19
21
20
22
21
// free "private" functions, for internal setup only
23
22
23
+ // given a path: return the engine name is the path points to a valid engine
24
+ // module directory, or false if it doesn't
25
+ function isEngineModule ( filePath ) {
26
+ var baseName = path . basename ( filePath ) ;
27
+ var engineMatch = baseName . match ( engineMatcher ) ;
28
+
29
+ if ( engineMatch ) { return engineMatch [ 1 ] ; }
30
+ return false ;
31
+ }
32
+
33
+ function getEngineModulePath ( engineName ) {
34
+ return path . resolve ( enginesDirectory , "patternengine-node-" + engineName ) ;
35
+ }
36
+
37
+ // go find the names of all found engines
24
38
function findSupportedPatternEngineNames ( ) {
25
39
var foundPatternEngineNames = [ ] ;
26
40
27
- // find
41
+ // iterate over module directory and build a list of available pattern engine
42
+ // names
28
43
diveSync ( enginesDirectory , {
29
44
recursive : false ,
30
- filter : function ( filePath , dir ) {
31
- var baseName = path . basename ( filePath ) ,
32
- engineMatch = baseName . match ( engineMatcher ) ;
33
-
34
- if ( dir || engineMatch !== null ) { return true ; }
35
- return false ;
36
- }
45
+ directories : true
37
46
} , function ( err , filePath ) {
38
47
if ( err ) { throw err ; }
39
- var baseName = path . basename ( filePath ) ,
40
- engineMatch = baseName . match ( engineMatcher ) ,
41
- foundEngineName = engineMatch [ 1 ] ;
42
-
43
- foundPatternEngineNames . push ( foundEngineName ) ;
48
+ var foundEngineName = isEngineModule ( filePath ) ;
49
+ if ( foundEngineName ) {
50
+ foundPatternEngineNames . push ( foundEngineName ) ;
51
+ }
44
52
} ) ;
45
53
46
54
return foundPatternEngineNames ;
47
55
}
48
56
57
+
49
58
// try to load all supported engines
50
59
function loadAllEngines ( enginesObject ) {
51
60
console . log ( '\nLoading engines...' ) ;
@@ -54,7 +63,7 @@ function loadAllEngines(enginesObject) {
54
63
var notLoaded = false ;
55
64
56
65
try {
57
- enginesObject [ engineName ] = require ( './engine_' + engineName ) ;
66
+ enginesObject [ engineName ] = require ( getEngineModulePath ( engineName ) ) ;
58
67
} catch ( err ) {
59
68
// Handle errors loading each pattern engine. This will usually be
60
69
// because the engine's renderer hasn't been installed by the end user
0 commit comments