@@ -67,6 +67,8 @@ function createLoadRecord (state, key, registration) {
67
67
instantiatePromise : undefined ,
68
68
dependencies : undefined ,
69
69
execute : undefined ,
70
+ executingRequire : false ,
71
+
70
72
// underlying module object bindings
71
73
moduleObj : undefined ,
72
74
@@ -210,7 +212,8 @@ function instantiate (loader, load, link, registry, state) {
210
212
if ( registration [ 2 ] ) {
211
213
link . moduleObj . default = { } ;
212
214
link . moduleObj . __useDefault = true ;
213
- link . execute = registration [ 1 ] ;
215
+ link . executingRequire = registration [ 1 ] ;
216
+ link . execute = registration [ 2 ] ;
214
217
}
215
218
216
219
// process System.register declaration
@@ -452,48 +455,34 @@ RegisterLoader.prototype.register = function (key, deps, declare) {
452
455
453
456
// anonymous modules get stored as lastAnon
454
457
if ( declare === undefined ) {
455
- state . lastRegister = [ key , deps , false ] ;
458
+ state . lastRegister = [ key , deps , undefined ] ;
456
459
}
457
460
458
461
// everything else registers into the register cache
459
462
else {
460
463
var load = state . records [ key ] || createLoadRecord ( state , key , undefined ) ;
461
- load . registration = [ deps , declare , false ] ;
464
+ load . registration = [ deps , declare , undefined ] ;
462
465
}
463
466
} ;
464
467
465
468
/*
466
469
* System.registerDyanmic
467
470
*/
468
- RegisterLoader . prototype . registerDynamic = function ( key , deps , execute ) {
471
+ RegisterLoader . prototype . registerDynamic = function ( key , deps , executingRequire , execute ) {
469
472
var state = this [ REGISTER_INTERNAL ] ;
470
473
471
474
// anonymous modules get stored as lastAnon
472
475
if ( typeof key !== 'string' ) {
473
- state . lastRegister = [ key , typeof deps === 'boolean' ? dynamicExecuteCompat ( key , deps , execute ) : deps , true ] ;
476
+ state . lastRegister = [ key , deps , executingRequire ] ;
474
477
}
475
478
476
479
// everything else registers into the register cache
477
480
else {
478
481
var load = state . records [ key ] || createLoadRecord ( state , key , undefined ) ;
479
- load . registration = [ deps , typeof execute === 'boolean' ? dynamicExecuteCompat ( deps , execute , arguments [ 3 ] ) : execute , true ] ;
482
+ load . registration = [ deps , executingRequire , execute ] ;
480
483
}
481
484
} ;
482
485
483
- function dynamicExecuteCompat ( deps , executingRequire , execute ) {
484
- return function ( require , exports , module ) {
485
- // evaluate deps first
486
- if ( ! executingRequire )
487
- for ( var i = 0 ; i < deps . length ; i ++ )
488
- require ( deps [ i ] ) ;
489
-
490
- // then run execution function
491
- // also provide backwards compat for no return value
492
- // previous 4 argument form of System.register had "this" as global value
493
- module . exports = execute . apply ( global , arguments ) || module . exports ;
494
- } ;
495
- }
496
-
497
486
// ContextualLoader class
498
487
// backwards-compatible with previous System.register context argument by exposing .id
499
488
function ContextualLoader ( loader , key ) {
@@ -526,7 +515,7 @@ function ensureEvaluate (loader, load, link, registry, state, seen) {
526
515
527
516
// for ES loads we always run ensureEvaluate on top-level, so empty seen is passed regardless
528
517
// for dynamic loads, we pass seen if also dynamic
529
- var err = doEvaluate ( loader , load , link , registry , state , load . setters ? [ ] : seen || [ ] ) ;
518
+ var err = doEvaluate ( loader , load , link , registry , state , link . setters ? [ ] : seen || [ ] ) ;
530
519
if ( err ) {
531
520
clearLoadErrors ( loader , load ) ;
532
521
throw err ;
@@ -593,7 +582,7 @@ function doEvaluate (loader, load, link, registry, state, seen) {
593
582
// ES System.register execute
594
583
// "this" is null in ES
595
584
if ( link . setters ) {
596
- err = doExecute ( link . execute , nullContext ) ;
585
+ err = declarativeExecute ( link . execute ) ;
597
586
}
598
587
// System.registerDynamic execute
599
588
// "this" is "exports" in CJS
@@ -609,11 +598,15 @@ function doEvaluate (loader, load, link, registry, state, seen) {
609
598
return moduleObj . default ;
610
599
}
611
600
} ) ;
612
- err = doExecute ( link . execute , module . exports , [
613
- makeDynamicRequire ( loader , load . key , link . dependencies , link . dependencyInstantiations , registry , state , seen ) ,
614
- module . exports ,
615
- module
616
- ] ) ;
601
+
602
+ var require = makeDynamicRequire ( loader , load . key , link . dependencies , link . dependencyInstantiations , registry , state , seen ) ;
603
+
604
+ // evaluate deps first
605
+ if ( ! link . executingRequire )
606
+ for ( var i = 0 ; i < link . dependencies . length ; i ++ )
607
+ require ( link . dependencies [ i ] ) ;
608
+
609
+ err = dynamicExecute ( link . execute , require , moduleObj . default , module ) ;
617
610
// __esModule flag extension support
618
611
if ( moduleObj . default && moduleObj . default . __esModule )
619
612
for ( var p in moduleObj . default )
@@ -645,9 +638,21 @@ function doEvaluate (loader, load, link, registry, state, seen) {
645
638
var nullContext = { } ;
646
639
if ( Object . freeze )
647
640
Object . freeze ( nullContext ) ;
648
- function doExecute ( execute , context , args ) {
641
+
642
+ function declarativeExecute ( execute ) {
643
+ try {
644
+ execute . call ( nullContext ) ;
645
+ }
646
+ catch ( e ) {
647
+ return e ;
648
+ }
649
+ }
650
+
651
+ function dynamicExecute ( execute , require , exports , module ) {
649
652
try {
650
- execute . apply ( context , args ) ;
653
+ var output = execute . call ( global , require , exports , module ) ;
654
+ if ( output !== undefined )
655
+ module . exports = output ;
651
656
}
652
657
catch ( e ) {
653
658
return e ;
0 commit comments