@@ -10,9 +10,12 @@ import loaderUtils from 'loader-utils';
10
10
import laxarTooling from 'laxar-tooling' ;
11
11
12
12
const DEFAULT_CONFIG = { } ;
13
+ const JSONISH = / ^ \s * [ { [ ] / ;
13
14
14
15
module . exports = function ( source /*, map */ ) {
15
16
const loaderContext = this ;
17
+ const rootContext = loaderContext . rootContext ||
18
+ ( loaderContext . options ? loaderContext . options . context : '' ) ;
16
19
const query = loaderUtils . parseQuery ( loaderContext . query ) ;
17
20
const entries = query . entries && buildEntries ( query ) ;
18
21
@@ -29,7 +32,7 @@ module.exports = function( source /*, map */ ) {
29
32
30
33
const configPath = typeof query . laxarConfig === 'string' ?
31
34
resolveRelative ( loaderContext . context , query . laxarConfig ) :
32
- resolveRelative ( loaderContext . options . context || '' , './laxar.config' ) ;
35
+ resolveRelative ( rootContext , './laxar.config' ) ;
33
36
34
37
const loaders = {
35
38
json : require . resolve ( './json' ) ,
@@ -108,7 +111,13 @@ module.exports = function( source /*, map */ ) {
108
111
) ;
109
112
110
113
function readJson ( filename ) {
111
- return loadModule ( `${ loaders . json } !${ filename } ` ) ;
114
+ return loadSource ( filename )
115
+ . then ( code => {
116
+ if ( JSONISH . test ( code ) ) {
117
+ return JSON . parse ( code ) ;
118
+ }
119
+ return loaderContext . exec ( code , filename ) ;
120
+ } ) ;
112
121
}
113
122
114
123
function requireFile ( module , type , name ) {
@@ -126,25 +135,24 @@ module.exports = function( source /*, map */ ) {
126
135
127
136
function loadModule ( request ) {
128
137
const filename = request . split ( '!' ) . pop ( ) . split ( '?' ) . shift ( ) ;
138
+ return loadSource ( request )
139
+ . then ( code => loaderContext . exec ( code , filename ) ) ;
140
+ }
129
141
142
+ function loadSource ( request ) {
130
143
return new Promise ( ( resolve , reject ) => {
131
144
loaderContext . loadModule ( request , ( err , code ) => {
132
145
if ( err ) {
133
146
reject ( err ) ;
134
147
return ;
135
148
}
136
- try {
137
- resolve ( loaderContext . exec ( code , filename ) ) ;
138
- }
139
- catch ( err ) {
140
- reject ( err ) ;
141
- }
149
+ resolve ( code ) ;
142
150
} ) ;
143
151
} ) ;
144
152
}
145
153
146
154
function resolve ( ref ) {
147
- return resolveRelative ( loaderContext . options . context , ref ) ;
155
+ return resolveRelative ( rootContext , ref ) ;
148
156
}
149
157
150
158
function resolveRelative ( context , ref ) {
0 commit comments