@@ -266,92 +266,100 @@ function logloads(loads) {
266266 . then ( function ( source ) {
267267 if ( load . status != 'loading' )
268268 return ;
269- return loader . loaderObj . translate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
270- } )
271269
272- // 15.2.4.5.2 CallInstantiate
273- . then ( function ( source ) {
274- if ( load . status != 'loading' )
275- return ;
276- load . source = source ;
277- return loader . loaderObj . instantiate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
278- } )
270+ return Promise . resolve ( loader . loaderObj . translate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) )
279271
280- // 15.2.4.5.3 InstantiateSucceeded
281- . then ( function ( instantiateResult ) {
282- if ( load . status != 'loading' )
283- return ;
284-
285- if ( instantiateResult === undefined ) {
286- load . address = load . address || '<Anonymous Module ' + ++ anonCnt + '>' ;
287-
288- // instead of load.kind, use load.isDeclarative
289- load . isDeclarative = true ;
290- __eval ( loader . loaderObj . transpile ( load ) , __global , load ) ;
291- }
292- else if ( typeof instantiateResult == 'object' ) {
293- load . depsList = instantiateResult . deps || [ ] ;
294- load . execute = instantiateResult . execute ;
295- load . isDeclarative = false ;
296- }
297- else
298- throw TypeError ( 'Invalid instantiate return value' ) ;
272+ // 15.2.4.5.2 CallInstantiate
273+ . then ( function ( source ) {
274+ load . source = source ;
275+ return loader . loaderObj . instantiate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
276+ } )
299277
278+ // 15.2.4.5.3 InstantiateSucceeded
279+ . then ( function ( instantiateResult ) {
280+ if ( instantiateResult === undefined ) {
281+ load . address = load . address || '<Anonymous Module ' + ++ anonCnt + '>' ;
282+
283+ // instead of load.kind, use load.isDeclarative
284+ load . isDeclarative = true ;
285+ return loader . loaderObj . transpile ( load )
286+ . then ( function ( transpiled ) {
287+ // Hijack System.register to set declare function
288+ var curSystem = __global . System ;
289+ var curRegister = curSystem . register ;
290+ curSystem . register = function ( name , deps , declare ) {
291+ if ( typeof name != 'string' ) {
292+ declare = deps ;
293+ deps = name ;
294+ }
295+ // store the registered declaration as load.declare
296+ // store the deps as load.deps
297+ load . declare = declare ;
298+ load . depsList = deps ;
299+ }
300+ __eval ( transpiled , __global , load ) ;
301+ curSystem . register = curRegister ;
302+ } ) ;
303+ }
304+ else if ( typeof instantiateResult == 'object' ) {
305+ load . depsList = instantiateResult . deps || [ ] ;
306+ load . execute = instantiateResult . execute ;
307+ load . isDeclarative = false ;
308+ }
309+ else
310+ throw TypeError ( 'Invalid instantiate return value' ) ;
311+ } )
300312 // 15.2.4.6 ProcessLoadDependencies
301- load . dependencies = [ ] ;
302- var depsList = load . depsList ;
303-
304- var loadPromises = [ ] ;
305- for ( var i = 0 , l = depsList . length ; i < l ; i ++ ) ( function ( request , index ) {
306- loadPromises . push (
307- requestLoad ( loader , request , load . name , load . address )
308-
309- // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)
310- . then ( function ( depLoad ) {
311-
312- console . assert ( ! load . dependencies . some ( function ( dep ) {
313- return dep . key == request ;
314- } ) , 'not already a dependency' ) ;
315-
316- // adjusted from spec to maintain dependency order
317- // this is due to the System.register internal implementation needs
318- load . dependencies [ index ] = {
319- key : request ,
320- value : depLoad . name
321- } ;
322-
323- if ( depLoad . status != 'linked' ) {
324- var linkSets = load . linkSets . concat ( [ ] ) ;
325- for ( var i = 0 , l = linkSets . length ; i < l ; i ++ )
326- addLoadToLinkSet ( linkSets [ i ] , depLoad ) ;
327- }
328-
329- // console.log('AddDependencyLoad ' + depLoad.name + ' for ' + load.name);
330- // snapshot(loader);
331- } )
332- ) ;
333- } ) ( depsList [ i ] , i ) ;
334-
335- return Promise . all ( loadPromises ) ;
336- } )
313+ . then ( function ( ) {
314+ load . dependencies = [ ] ;
315+ var depsList = load . depsList ;
316+
317+ var loadPromises = [ ] ;
318+ for ( var i = 0 , l = depsList . length ; i < l ; i ++ ) ( function ( request , index ) {
319+ loadPromises . push (
320+ requestLoad ( loader , request , load . name , load . address )
321+
322+ // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)
323+ . then ( function ( depLoad ) {
324+
325+ // adjusted from spec to maintain dependency order
326+ // this is due to the System.register internal implementation needs
327+ load . dependencies [ index ] = {
328+ key : request ,
329+ value : depLoad . name
330+ } ;
331+
332+ if ( depLoad . status != 'linked' ) {
333+ var linkSets = load . linkSets . concat ( [ ] ) ;
334+ for ( var i = 0 , l = linkSets . length ; i < l ; i ++ )
335+ addLoadToLinkSet ( linkSets [ i ] , depLoad ) ;
336+ }
337+
338+ // console.log('AddDependencyLoad ' + depLoad.name + ' for ' + load.name);
339+ // snapshot(loader);
340+ } )
341+ ) ;
342+ } ) ( depsList [ i ] , i ) ;
343+
344+ return Promise . all ( loadPromises ) ;
345+ } )
337346
338- // 15.2.4.6.2 LoadSucceeded
339- . then ( function ( ) {
340- // console.log('LoadSucceeded ' + load.name);
341- // snapshot(loader);
347+ // 15.2.4.6.2 LoadSucceeded
348+ . then ( function ( ) {
349+ // console.log('LoadSucceeded ' + load.name);
350+ // snapshot(loader);
342351
343- console . assert ( load . status == 'loading' , 'is loading' ) ;
352+ console . assert ( load . status == 'loading' , 'is loading' ) ;
344353
345- load . status = 'loaded' ;
354+ load . status = 'loaded' ;
346355
347- var linkSets = load . linkSets . concat ( [ ] ) ;
348- for ( var i = 0 , l = linkSets . length ; i < l ; i ++ )
349- updateLinkSetOnLoad ( linkSets [ i ] , load ) ;
356+ var linkSets = load . linkSets . concat ( [ ] ) ;
357+ for ( var i = 0 , l = linkSets . length ; i < l ; i ++ )
358+ updateLinkSetOnLoad ( linkSets [ i ] , load ) ;
359+ } ) ;
350360 } )
351-
352361 // 15.2.4.5.4 LoadFailed
353362 [ 'catch' ] ( function ( exc ) {
354- console . assert ( load . status == 'loading' , 'is loading on fail' ) ;
355363 load . status = 'failed' ;
356364 load . exception = exc ;
357365
@@ -1112,40 +1120,63 @@ function logloads(loads) {
11121120 * Traceur and Babel transpile hook for Loader
11131121 */
11141122( function ( Loader ) {
1115- // Returns an array of ModuleSpecifiers
1116- var transpiler , transpilerModule ;
1117- var isNode = typeof window == 'undefined' && typeof WorkerGlobalScope == 'undefined' ;
1123+ var g = __global ;
1124+
1125+ function getTranspilerModule ( loader , globalName ) {
1126+ return loader . newModule ( { 'default' : g [ globalName ] , __useDefault : true } ) ;
1127+ }
1128+ var firstRun = true ;
11181129
11191130 // use Traceur by default
11201131 Loader . prototype . transpiler = 'traceur' ;
11211132
11221133 Loader . prototype . transpile = function ( load ) {
1123- if ( ! transpiler ) {
1124- if ( this . transpiler == 'babel' ) {
1125- transpiler = babelTranspile ;
1126- transpilerModule = isNode ? require ( 'babel-core' ) : __global . babel ;
1127- }
1128- else {
1129- transpiler = traceurTranspile ;
1130- transpilerModule = isNode ? require ( 'traceur' ) : __global . traceur ;
1131- }
1132-
1133- if ( ! transpilerModule )
1134- throw new TypeError ( 'Include Traceur or Babel for module syntax support.' ) ;
1134+ var self = this ;
1135+
1136+ // pick up Transpiler modules from existing globals on first run if set
1137+ if ( firstRun ) {
1138+ if ( g . traceur && ! self . has ( 'traceur' ) )
1139+ self . set ( 'traceur' , getTranspilerModule ( self , 'traceur' ) ) ;
1140+ if ( g . babel && ! self . has ( 'babel' ) )
1141+ self . set ( 'babel' , getTranspilerModule ( self , 'babel' ) ) ;
1142+ firstRun = false ;
11351143 }
1144+
1145+ return self [ 'import' ] ( self . transpiler ) . then ( function ( transpiler ) {
1146+ if ( transpiler . __useDefault )
1147+ transpiler = transpiler [ 'default' ] ;
1148+ return 'var __moduleAddress = "' + load . address + '";' + ( transpiler . Compiler ? traceurTranspile : babelTranspile ) . call ( self , load , transpiler ) ;
1149+ } ) ;
1150+ } ;
11361151
1137- return 'var __moduleAddress = "' + load . address + '";' + transpiler . call ( this , load ) ;
1138- }
1152+ Loader . prototype . instantiate = function ( load ) {
1153+ // load transpiler as a global (avoiding System clobbering)
1154+ if ( load . name === this . transpiler ) {
1155+ var self = this ;
1156+ return {
1157+ deps : [ ] ,
1158+ execute : function ( ) {
1159+ var curSystem = g . System ;
1160+ var curLoader = g . Reflect . Loader ;
1161+ __eval ( '(function(require,exports,module){' + load . source + '})();' , g , load ) ;
1162+ g . System = curSystem ;
1163+ g . Reflect . Loader = curLoader ;
1164+ return getTranspilerModule ( self , load . name ) ;
1165+ }
1166+ } ;
1167+ }
1168+ } ;
11391169
1140- function traceurTranspile ( load ) {
1170+ function traceurTranspile ( load , traceur ) {
11411171 var options = this . traceurOptions || { } ;
11421172 options . modules = 'instantiate' ;
11431173 options . script = false ;
11441174 options . sourceMaps = 'inline' ;
11451175 options . filename = load . address ;
11461176 options . inputSourceMap = load . metadata . sourceMap ;
1177+ options . moduleName = false ;
11471178
1148- var compiler = new transpilerModule . Compiler ( options ) ;
1179+ var compiler = new traceur . Compiler ( options ) ;
11491180 var source = doTraceurCompile ( load . source , compiler , options . filename ) ;
11501181
11511182 // add "!eval" to end of Traceur sourceURL
@@ -1164,17 +1195,18 @@ function logloads(loads) {
11641195 }
11651196 }
11661197
1167- function babelTranspile ( load ) {
1198+ function babelTranspile ( load , babel ) {
11681199 var options = this . babelOptions || { } ;
11691200 options . modules = 'system' ;
11701201 options . sourceMap = 'inline' ;
11711202 options . filename = load . address ;
11721203 options . code = true ;
11731204 options . ast = false ;
1174- options . blacklist = options . blacklist || [ ] ;
1175- options . blacklist . push ( 'react' ) ;
1205+
1206+ if ( ! options . blacklist )
1207+ options . blacklist = [ 'react' ] ;
11761208
1177- var source = transpilerModule . transform ( load . source , options ) . code ;
1209+ var source = babel . transform ( load . source , options ) . code ;
11781210
11791211 // add "!eval" to end of Babel sourceURL
11801212 // I believe this does something?
@@ -1236,6 +1268,9 @@ function logloads(loads) {
12361268
12371269 function toAbsoluteURL ( base , href ) {
12381270
1271+ if ( isWindows )
1272+ href = href . replace ( / \\ / g, '/' ) ;
1273+
12391274 href = parseURI ( href || '' ) ;
12401275 base = parseURI ( base || '' ) ;
12411276
@@ -1534,29 +1569,15 @@ function logloads(loads) {
15341569
15351570// Define our eval outside of the scope of any other reference defined in this
15361571// file to avoid adding those references to the evaluation scope.
1537- function __eval ( __source , __global , load ) {
1538- // Hijack System.register to set declare function
1539- var __curRegister = System . register ;
1540- System . register = function ( name , deps , declare ) {
1541- if ( typeof name != 'string' ) {
1542- declare = deps ;
1543- deps = name ;
1544- }
1545- // store the registered declaration as load.declare
1546- // store the deps as load.deps
1547- load . declare = declare ;
1548- load . depsList = deps ;
1549- }
1572+ function __eval ( __source , __global , __load ) {
15501573 try {
1551- eval ( '(function() { var __moduleName = "' + ( load . name || '' ) . replace ( '"' , '\"' ) + '"; ' + __source + ' \n }).call(__global);' ) ;
1574+ eval ( '(function() { var __moduleName = "' + ( __load . name || '' ) . replace ( '"' , '\"' ) + '"; ' + __source + ' \n }).call(__global);' ) ;
15521575 }
15531576 catch ( e ) {
15541577 if ( e . name == 'SyntaxError' || e . name == 'TypeError' )
1555- e . message = 'Evaluating ' + ( load . name || load . address ) + '\n\t' + e . message ;
1578+ e . message = 'Evaluating ' + ( __load . name || load . address ) + '\n\t' + e . message ;
15561579 throw e ;
15571580 }
1558-
1559- System . register = __curRegister ;
15601581}
15611582
15621583} ) ( typeof window != 'undefined' ? window : ( typeof WorkerGlobalScope != 'undefined' ?
0 commit comments