11const { existsSync } = require ( 'fs' ) ;
2- const { resolve, sep, dirname } = require ( 'path' ) ;
2+ const { resolve, sep, dirname, parse } = require ( 'path' ) ;
33const { extensions } = require ( 'interpret' ) ;
44
55const GroupHelper = require ( '../utils/group-helper' ) ;
@@ -19,28 +19,32 @@ const getDefaultConfigFiles = () => {
1919}
2020
2121const getConfigInfoFromFileName = ( filename ) => {
22- const originalExt = filename . split ( '.' ) . pop ( ) ;
23- return Object . keys ( extensions ) . filter ( ext => {
24- return '.' . concat ( originalExt ) === ext ;
25- } ) .
26- map ( ext => {
27- return {
28- path : resolve ( filename ) ,
29- ext : ext ,
30- module : extensions [ ext ]
31- }
32- } ) . filter ( e => existsSync ( e . path ) ) ;
22+ const fileMetaData = parse ( filename ) ;
23+ return Object . keys ( extensions )
24+ . filter ( ext => ext . includes ( fileMetaData . ext ) )
25+ . filter ( ext => fileMetaData . base . substr ( fileMetaData . base . length - ext . length ) === ext )
26+ . map ( ext => {
27+ return {
28+ path : resolve ( filename ) ,
29+ ext : ext ,
30+ module : extensions [ ext ]
31+ }
32+ } )
33+ . filter ( e => existsSync ( e . path ) ) ;
3334}
3435
3536class ConfigGroup extends GroupHelper {
3637 constructor ( options ) {
3738 super ( options ) ;
3839 }
3940
40- require ( path ) {
41- const result = require ( path ) ;
41+ requireModule ( path , cb ) {
42+ const result = cb ( path ) ;
4243 if ( result && result . __esModule && result . default ) {
43- return result . default ;
44+ return {
45+ content : result . default ,
46+ path : path
47+ } ;
4448 }
4549 return {
4650 path : path ,
@@ -49,15 +53,21 @@ class ConfigGroup extends GroupHelper {
4953 }
5054
5155 requireConfig ( configModule ) {
52- return ( ( ) => {
53- try {
54- if ( ! configModule . module ) {
55- return this . require ( configModule . path ) ;
56- }
57- } catch ( err ) {
58- console . log ( err ) ;
59- }
60- } ) ( ) ;
56+ if ( ! configModule . module ) {
57+ return this . requireModule ( configModule . path , require ) ;
58+ } else if ( Array . isArray ( configModule . module ) ) {
59+ configModule . module . forEach ( mod => {
60+ const moduleRequire = require ( mod . module ) ;
61+ return this . requireModule ( configModule . path , moduleRequire ) ;
62+ } ) ;
63+ } else if ( typeof configModule . module === 'string' ) {
64+ const moduleRequire = require ( configModule . module ) ;
65+ return this . requireModule ( configModule . path , moduleRequire ) ;
66+ }
67+ else {
68+ const moduleRequire = require ( configModule . module . module ) ( module ) ;
69+ return this . requireModule ( configModule . path , moduleRequire ) ;
70+ }
6171 }
6272
6373 async finalize ( moduleObj ) {
0 commit comments