11'use strict' ;
22
3- const tryRequire = require ( 'try-require' ) ;
43const fs = require ( 'fs-extra' ) ;
54const path = require ( 'path' ) ;
65
6+ const loaders = require ( './loaders' ) ;
7+ const logger = require ( '../logger' ) ;
8+
9+ const DEFAULT_LOADERS = Object . freeze ( {
10+ '.js' : loaders . loadJs ,
11+ '.json' : loaders . loadJson ,
12+ '.yaml' : loaders . loadYaml ,
13+ '.yml' : loaders . loadYaml ,
14+ // noExt: loaders.loadYaml,
15+ } ) ;
16+
17+ function loaderExt ( filename ) {
18+ return path . extname ( filename ) || 'noExt' ;
19+ }
20+
721function isSupport ( filename ) {
8- return [ '.js' , '.json' ] . some ( ext => {
9- return filename . endsWith ( ext ) ;
22+ const _ext = loaderExt ( filename ) ;
23+ return Object . keys ( DEFAULT_LOADERS ) . some ( ext => {
24+ return ext === _ext ;
1025 } ) ;
1126}
1227
@@ -18,14 +33,24 @@ function load(root, filename) {
1833 if ( ! fs . statSync ( filePath ) . isFile ( ) ) {
1934 return null ;
2035 }
21- return tryRequire ( filePath ) ;
36+ const loaderKey = loaderExt ( filename ) ;
37+ const loader = DEFAULT_LOADERS [ loaderKey ] ;
38+ if ( ! loader ) {
39+ logger . throw ( `No loader specified for extension "${ loaderKey } ", so "${ filename } " is invalid` ) ;
40+ }
41+ try {
42+ return loader ( filePath ) ;
43+ } catch ( err ) {
44+ logger . throw ( err ) ;
45+ }
2246}
2347
2448function loadFile ( root , filename , { before, after } = { } ) {
2549 if ( ! root || ! filename ) {
2650 return null ;
2751 }
2852 if ( ! isSupport ( filename ) ) {
53+ logger . warn ( `Not Support extension, so "${ filename } " is invalid` ) ;
2954 return null ;
3055 }
3156 if ( before && ! before ( root , filename ) ) {
0 commit comments