@@ -266,92 +266,100 @@ function logloads(loads) {
266
266
. then ( function ( source ) {
267
267
if ( load . status != 'loading' )
268
268
return ;
269
- return loader . loaderObj . translate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
270
- } )
271
269
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 } ) )
279
271
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
+ } )
299
277
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
+ } )
300
312
// 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
+ } )
337
346
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);
342
351
343
- console . assert ( load . status == 'loading' , 'is loading' ) ;
352
+ console . assert ( load . status == 'loading' , 'is loading' ) ;
344
353
345
- load . status = 'loaded' ;
354
+ load . status = 'loaded' ;
346
355
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
+ } ) ;
350
360
} )
351
-
352
361
// 15.2.4.5.4 LoadFailed
353
362
[ 'catch' ] ( function ( exc ) {
354
- console . assert ( load . status == 'loading' , 'is loading on fail' ) ;
355
363
load . status = 'failed' ;
356
364
load . exception = exc ;
357
365
@@ -1112,40 +1120,63 @@ function logloads(loads) {
1112
1120
* Traceur and Babel transpile hook for Loader
1113
1121
*/
1114
1122
( 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 ;
1118
1129
1119
1130
// use Traceur by default
1120
1131
Loader . prototype . transpiler = 'traceur' ;
1121
1132
1122
1133
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 ;
1135
1143
}
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
+ } ;
1136
1151
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
+ } ;
1139
1169
1140
- function traceurTranspile ( load ) {
1170
+ function traceurTranspile ( load , traceur ) {
1141
1171
var options = this . traceurOptions || { } ;
1142
1172
options . modules = 'instantiate' ;
1143
1173
options . script = false ;
1144
1174
options . sourceMaps = 'inline' ;
1145
1175
options . filename = load . address ;
1146
1176
options . inputSourceMap = load . metadata . sourceMap ;
1177
+ options . moduleName = false ;
1147
1178
1148
- var compiler = new transpilerModule . Compiler ( options ) ;
1179
+ var compiler = new traceur . Compiler ( options ) ;
1149
1180
var source = doTraceurCompile ( load . source , compiler , options . filename ) ;
1150
1181
1151
1182
// add "!eval" to end of Traceur sourceURL
@@ -1164,17 +1195,18 @@ function logloads(loads) {
1164
1195
}
1165
1196
}
1166
1197
1167
- function babelTranspile ( load ) {
1198
+ function babelTranspile ( load , babel ) {
1168
1199
var options = this . babelOptions || { } ;
1169
1200
options . modules = 'system' ;
1170
1201
options . sourceMap = 'inline' ;
1171
1202
options . filename = load . address ;
1172
1203
options . code = true ;
1173
1204
options . ast = false ;
1174
- options . blacklist = options . blacklist || [ ] ;
1175
- options . blacklist . push ( 'react' ) ;
1205
+
1206
+ if ( ! options . blacklist )
1207
+ options . blacklist = [ 'react' ] ;
1176
1208
1177
- var source = transpilerModule . transform ( load . source , options ) . code ;
1209
+ var source = babel . transform ( load . source , options ) . code ;
1178
1210
1179
1211
// add "!eval" to end of Babel sourceURL
1180
1212
// I believe this does something?
@@ -1236,6 +1268,9 @@ function logloads(loads) {
1236
1268
1237
1269
function toAbsoluteURL ( base , href ) {
1238
1270
1271
+ if ( isWindows )
1272
+ href = href . replace ( / \\ / g, '/' ) ;
1273
+
1239
1274
href = parseURI ( href || '' ) ;
1240
1275
base = parseURI ( base || '' ) ;
1241
1276
@@ -1534,29 +1569,15 @@ function logloads(loads) {
1534
1569
1535
1570
// Define our eval outside of the scope of any other reference defined in this
1536
1571
// 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 ) {
1550
1573
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);' ) ;
1552
1575
}
1553
1576
catch ( e ) {
1554
1577
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 ;
1556
1579
throw e ;
1557
1580
}
1558
-
1559
- System . register = __curRegister ;
1560
1581
}
1561
1582
1562
1583
} ) ( typeof window != 'undefined' ? window : ( typeof WorkerGlobalScope != 'undefined' ?
0 commit comments