@@ -15,17 +15,17 @@ export default RegisterLoader;
15
15
* - build tracing support by providing a .trace=true and .loads object format
16
16
*/
17
17
18
- var REGISTER_REGISTRY = createSymbol ( 'registerRegistry' ) ;
19
- var REGISTERED_LAST_ANON = createSymbol ( 'registeredLastAnon' ) ;
18
+ var REGISTER_INTERNAL = createSymbol ( 'register-internal' ) ;
20
19
21
20
function RegisterLoader ( ) {
22
21
Loader . call ( this ) ;
23
22
24
- // last anonymous System.register call
25
- this [ REGISTERED_LAST_ANON ] = undefined ;
26
-
27
- // in-flight es module load records
28
- this [ REGISTER_REGISTRY ] = { } ;
23
+ this [ REGISTER_INTERNAL ] = {
24
+ // last anonymous System.register call
25
+ lastRegister : undefined ,
26
+ // in-flight es module load records
27
+ records : { }
28
+ }
29
29
30
30
// tracing
31
31
this . trace = false ;
@@ -67,8 +67,8 @@ RegisterLoader.prototype[Loader.resolve] = resolve;
67
67
// once evaluated, the linkRecord is set to undefined leaving just the other load record properties
68
68
// this allows tracking new binding listeners for es modules through importerSetters
69
69
// for dynamic modules, the load record is removed entirely.
70
- function createLoadRecord ( key , registration ) {
71
- return this [ REGISTER_REGISTRY ] [ key ] = {
70
+ function createLoadRecord ( state , key , registration ) {
71
+ return state . records [ key ] = {
72
72
key : key ,
73
73
74
74
// defined System.register cache
@@ -117,10 +117,10 @@ function createLoadRecord (key, registration) {
117
117
118
118
RegisterLoader . prototype [ Loader . resolveInstantiate ] = function ( key , parentKey ) {
119
119
var loader = this ;
120
+ var state = this [ REGISTER_INTERNAL ] ;
120
121
var registry = loader . registry [ loader . registry . _registry ] ;
121
- var registerRegistry = loader [ REGISTER_REGISTRY ] ;
122
122
123
- return resolveInstantiate ( loader , key , parentKey , registry , registerRegistry )
123
+ return resolveInstantiate ( loader , key , parentKey , registry , state )
124
124
. then ( function ( instantiated ) {
125
125
if ( instantiated instanceof ModuleNamespace )
126
126
return instantiated ;
@@ -131,11 +131,11 @@ RegisterLoader.prototype[Loader.resolveInstantiate] = function (key, parentKey)
131
131
132
132
// resolveInstantiate always returns a load record with a link record and no module value
133
133
if ( instantiated . linkRecord . linked )
134
- return ensureEvaluate ( loader , instantiated , instantiated . linkRecord , registry , registerRegistry , undefined ) ;
134
+ return ensureEvaluate ( loader , instantiated , instantiated . linkRecord , registry , state , undefined ) ;
135
135
136
- return instantiateDeps ( loader , instantiated , instantiated . linkRecord , registry , registerRegistry , [ instantiated ] )
136
+ return instantiateDeps ( loader , instantiated , instantiated . linkRecord , registry , state , [ instantiated ] )
137
137
. then ( function ( ) {
138
- return ensureEvaluate ( loader , instantiated , instantiated . linkRecord , registry , registerRegistry , undefined ) ;
138
+ return ensureEvaluate ( loader , instantiated , instantiated . linkRecord , registry , state , undefined ) ;
139
139
} )
140
140
. catch ( function ( err ) {
141
141
clearLoadErrors ( loader , instantiated ) ;
@@ -144,18 +144,18 @@ RegisterLoader.prototype[Loader.resolveInstantiate] = function (key, parentKey)
144
144
} ) ;
145
145
} ;
146
146
147
- function resolveInstantiate ( loader , key , parentKey , registry , registerRegistry ) {
147
+ function resolveInstantiate ( loader , key , parentKey , registry , state ) {
148
148
// normalization shortpath for already-normalized key
149
149
// could add a plain name filter, but doesn't yet seem necessary for perf
150
150
var module = registry [ key ] ;
151
151
if ( module )
152
152
return Promise . resolve ( module ) ;
153
153
154
- var load = registerRegistry [ key ] ;
154
+ var load = state . records [ key ] ;
155
155
156
156
// already linked but not in main registry is ignored
157
157
if ( load && ! load . module )
158
- return instantiate ( loader , load , load . linkRecord , registry , registerRegistry ) ;
158
+ return instantiate ( loader , load , load . linkRecord , registry , state ) ;
159
159
160
160
return resolve . call ( loader , key , parentKey )
161
161
. then ( function ( resolvedKey ) {
@@ -164,51 +164,51 @@ function resolveInstantiate (loader, key, parentKey, registry, registerRegistry)
164
164
if ( module )
165
165
return module ;
166
166
167
- load = registerRegistry [ resolvedKey ] ;
167
+ load = state . records [ resolvedKey ] ;
168
168
169
169
// already has a module value but not already in the registry (load.module)
170
170
// means it was removed by registry.delete, so we should
171
171
// disgard the current load record creating a new one over it
172
172
// but keep any existing registration
173
173
if ( ! load || load . module )
174
- load = createLoadRecord . call ( loader , resolvedKey , load && load . registration ) ;
174
+ load = createLoadRecord ( state , resolvedKey , load && load . registration ) ;
175
175
176
176
var link = load . linkRecord ;
177
177
if ( ! link )
178
178
return load ;
179
179
180
- return instantiate ( loader , load , link , registry , registerRegistry ) ;
180
+ return instantiate ( loader , load , link , registry , state ) ;
181
181
} ) ;
182
182
}
183
183
184
- function createProcessAnonRegister ( loader , load ) {
184
+ function createProcessAnonRegister ( loader , load , state ) {
185
185
return function ( ) {
186
- var registeredLastAnon = loader [ REGISTERED_LAST_ANON ] ;
186
+ var lastRegister = state . lastRegister ;
187
187
188
- if ( ! registeredLastAnon )
188
+ if ( ! lastRegister )
189
189
return ! ! load . registration ;
190
190
191
- loader [ REGISTERED_LAST_ANON ] = undefined ;
192
- load . registration = registeredLastAnon ;
191
+ state . lastRegister = undefined ;
192
+ load . registration = lastRegister ;
193
193
194
194
return true ;
195
195
} ;
196
196
}
197
197
198
- function instantiate ( loader , load , link , registry , registerRegistry ) {
198
+ function instantiate ( loader , load , link , registry , state ) {
199
199
return link . instantiatePromise || ( link . instantiatePromise =
200
200
// if there is already an existing registration, skip running instantiate
201
201
( load . registration ? Promise . resolve ( ) : Promise . resolve ( ) . then ( function ( ) {
202
- loader [ REGISTERED_LAST_ANON ] = undefined ;
203
- return loader [ INSTANTIATE ] ( load . key , loader [ INSTANTIATE ] . length > 1 && createProcessAnonRegister ( loader , load ) ) ;
202
+ state . lastRegister = undefined ;
203
+ return loader [ INSTANTIATE ] ( load . key , loader [ INSTANTIATE ] . length > 1 && createProcessAnonRegister ( loader , load , state ) ) ;
204
204
} ) )
205
205
. then ( function ( instantiation ) {
206
206
// direct module return from instantiate -> we're done
207
207
if ( instantiation !== undefined ) {
208
208
if ( ! ( instantiation instanceof ModuleNamespace ) )
209
209
throw new TypeError ( 'Instantiate did not return a valid Module object.' ) ;
210
210
211
- delete registerRegistry [ load . key ] ;
211
+ delete state . records [ load . key ] ;
212
212
if ( loader . trace )
213
213
traceLoad ( loader , load , link ) ;
214
214
return registry [ load . key ] = instantiation ;
@@ -254,11 +254,11 @@ function instantiate (loader, load, link, registry, registerRegistry) {
254
254
}
255
255
256
256
// like resolveInstantiate, but returning load records for linking
257
- function resolveInstantiateDep ( loader , key , parentKey , registry , registerRegistry , traceDepMap ) {
257
+ function resolveInstantiateDep ( loader , key , parentKey , registry , state , traceDepMap ) {
258
258
// normalization shortpaths for already-normalized key
259
259
// DISABLED to prioritise consistent resolver calls
260
260
// could add a plain name filter, but doesn't yet seem necessary for perf
261
- /* var load = registerRegistry [key];
261
+ /* var load = state.records [key];
262
262
var module = registry[key];
263
263
264
264
if (module) {
@@ -276,15 +276,15 @@ function resolveInstantiateDep (loader, key, parentKey, registry, registerRegist
276
276
if (load && !load.module) {
277
277
if (traceDepMap)
278
278
traceDepMap[key] = key;
279
- return instantiate(loader, load, load.linkRecord, registry, registerRegistry );
279
+ return instantiate(loader, load, load.linkRecord, registry, state );
280
280
} */
281
281
return resolve . call ( loader , key , parentKey )
282
282
. then ( function ( resolvedKey ) {
283
283
if ( traceDepMap )
284
284
traceDepMap [ key ] = key ;
285
285
286
286
// normalization shortpaths for already-normalized key
287
- var load = registerRegistry [ resolvedKey ] ;
287
+ var load = state . records [ resolvedKey ] ;
288
288
var module = registry [ resolvedKey ] ;
289
289
290
290
// main loader registry always takes preference
@@ -296,13 +296,13 @@ function resolveInstantiateDep (loader, key, parentKey, registry, registerRegist
296
296
// disgard the current load record creating a new one over it
297
297
// but keep any existing registration
298
298
if ( ! load || ! module && load . module )
299
- load = createLoadRecord . call ( loader , resolvedKey , load && load . registration ) ;
299
+ load = createLoadRecord ( state , resolvedKey , load && load . registration ) ;
300
300
301
301
var link = load . linkRecord ;
302
302
if ( ! link )
303
303
return load ;
304
304
305
- return instantiate ( loader , load , link , registry , registerRegistry ) ;
305
+ return instantiate ( loader , load , link , registry , state ) ;
306
306
} ) ;
307
307
}
308
308
@@ -387,13 +387,13 @@ function registerDeclarative (loader, load, link, declare) {
387
387
}
388
388
}
389
389
390
- function instantiateDeps ( loader , load , link , registry , registerRegistry , seen ) {
390
+ function instantiateDeps ( loader , load , link , registry , state , seen ) {
391
391
return ( link . depsInstantiatePromise || ( link . depsInstantiatePromise = Promise . resolve ( )
392
392
. then ( function ( ) {
393
393
var depsInstantiatePromises = Array ( link . dependencies . length ) ;
394
394
395
395
for ( var i = 0 ; i < link . dependencies . length ; i ++ )
396
- depsInstantiatePromises [ i ] = resolveInstantiateDep ( loader , link . dependencies [ i ] , load . key , registry , registerRegistry , loader . trace && ( link . depMap = { } ) ) ;
396
+ depsInstantiatePromises [ i ] = resolveInstantiateDep ( loader , link . dependencies [ i ] , load . key , registry , state , loader . trace && ( link . depMap = { } ) ) ;
397
397
398
398
return Promise . all ( depsInstantiatePromises ) ;
399
399
} )
@@ -435,7 +435,7 @@ function instantiateDeps (loader, load, link, registry, registerRegistry, seen)
435
435
continue ;
436
436
seen . push ( depLoad ) ;
437
437
438
- deepDepsInstantiatePromises . push ( instantiateDeps ( loader , depLoad , depLoad . linkRecord , registry , registerRegistry , seen ) ) ;
438
+ deepDepsInstantiatePromises . push ( instantiateDeps ( loader , depLoad , depLoad . linkRecord , registry , state , seen ) ) ;
439
439
}
440
440
441
441
return Promise . all ( deepDepsInstantiatePromises ) ;
@@ -463,9 +463,11 @@ function instantiateDeps (loader, load, link, registry, registerRegistry, seen)
463
463
464
464
// clears an errored load and all its errored dependencies from the loads registry
465
465
function clearLoadErrors ( loader , load ) {
466
+ var state = loader [ REGISTER_INTERNAL ] ;
467
+
466
468
// clear from loads
467
- if ( loader [ REGISTER_REGISTRY ] [ load . key ] === load )
468
- delete loader [ REGISTER_REGISTRY ] [ load . key ] ;
469
+ if ( state . records [ load . key ] === load )
470
+ delete state . records [ load . key ] ;
469
471
470
472
var link = load . linkRecord ;
471
473
@@ -480,7 +482,7 @@ function clearLoadErrors (loader, load) {
480
482
if ( depLoad . linkRecord ) {
481
483
if ( depLoad . linkRecord . error ) {
482
484
// provides a circular reference check
483
- if ( loader [ REGISTER_REGISTRY ] [ depLoad . key ] === depLoad )
485
+ if ( state . records [ depLoad . key ] === depLoad )
484
486
clearLoadErrors ( loader , depLoad ) ;
485
487
}
486
488
@@ -497,14 +499,16 @@ function clearLoadErrors (loader, load) {
497
499
* System.register
498
500
*/
499
501
RegisterLoader . prototype . register = function ( key , deps , declare ) {
502
+ var state = this [ REGISTER_INTERNAL ] ;
503
+
500
504
// anonymous modules get stored as lastAnon
501
505
if ( declare === undefined ) {
502
- this [ REGISTERED_LAST_ANON ] = [ key , deps , false ] ;
506
+ state . lastRegister = [ key , deps , false ] ;
503
507
}
504
508
505
509
// everything else registers into the register cache
506
510
else {
507
- var load = this [ REGISTER_REGISTRY ] [ key ] || createLoadRecord . call ( this , key , undefined ) ;
511
+ var load = state . records [ key ] || createLoadRecord ( state , key , undefined ) ;
508
512
load . registration = [ deps , declare , false ] ;
509
513
}
510
514
} ;
@@ -513,14 +517,16 @@ RegisterLoader.prototype.register = function (key, deps, declare) {
513
517
* System.registerDyanmic
514
518
*/
515
519
RegisterLoader . prototype . registerDynamic = function ( key , deps , execute ) {
520
+ var state = this [ REGISTER_INTERNAL ] ;
521
+
516
522
// anonymous modules get stored as lastAnon
517
523
if ( typeof key !== 'string' ) {
518
- this [ REGISTERED_LAST_ANON ] = [ key , typeof deps === 'boolean' ? dynamicExecuteCompat ( key , deps , execute ) : deps , true ] ;
524
+ state . lastRegister = [ key , typeof deps === 'boolean' ? dynamicExecuteCompat ( key , deps , execute ) : deps , true ] ;
519
525
}
520
526
521
527
// everything else registers into the register cache
522
528
else {
523
- var load = this [ REGISTER_REGISTRY ] [ key ] || createLoadRecord . call ( this , key , undefined ) ;
529
+ var load = state . records [ key ] || createLoadRecord ( state , key , undefined ) ;
524
530
load . registration = [ deps , typeof execute === 'boolean' ? dynamicExecuteCompat ( deps , execute , arguments [ 3 ] ) : execute , true ] ;
525
531
}
526
532
} ;
@@ -559,7 +565,7 @@ ContextualLoader.prototype.load = function (key) {
559
565
} ;
560
566
561
567
// this is the execution function bound to the Module namespace record
562
- function ensureEvaluate ( loader , load , link , registry , registerRegistry , seen ) {
568
+ function ensureEvaluate ( loader , load , link , registry , state , seen ) {
563
569
if ( load . module )
564
570
return load . module ;
565
571
@@ -571,7 +577,7 @@ function ensureEvaluate (loader, load, link, registry, registerRegistry, seen) {
571
577
572
578
// for ES loads we always run ensureEvaluate on top-level, so empty seen is passed regardless
573
579
// for dynamic loads, we pass seen if also dynamic
574
- var err = doEvaluate ( loader , load , link , registry , registerRegistry , load . setters ? [ ] : seen || [ ] ) ;
580
+ var err = doEvaluate ( loader , load , link , registry , state , load . setters ? [ ] : seen || [ ] ) ;
575
581
if ( err ) {
576
582
clearLoadErrors ( loader , load ) ;
577
583
throw err ;
@@ -580,7 +586,7 @@ function ensureEvaluate (loader, load, link, registry, registerRegistry, seen) {
580
586
return load . module ;
581
587
}
582
588
583
- function makeDynamicRequire ( loader , key , dependencies , dependencyInstantiations , registry , registerRegistry , seen ) {
589
+ function makeDynamicRequire ( loader , key , dependencies , dependencyInstantiations , registry , state , seen ) {
584
590
// we can only require from already-known dependencies
585
591
return function ( name ) {
586
592
for ( var i = 0 ; i < dependencies . length ; i ++ ) {
@@ -591,7 +597,7 @@ function makeDynamicRequire (loader, key, dependencies, dependencyInstantiations
591
597
if ( depLoad instanceof ModuleNamespace )
592
598
module = depLoad ;
593
599
else
594
- module = ensureEvaluate ( loader , depLoad , depLoad . linkRecord , registry , registerRegistry , seen ) ;
600
+ module = ensureEvaluate ( loader , depLoad , depLoad . linkRecord , registry , state , seen ) ;
595
601
596
602
return module . __useDefault ? module . default : module ;
597
603
}
@@ -602,7 +608,7 @@ function makeDynamicRequire (loader, key, dependencies, dependencyInstantiations
602
608
603
609
// ensures the given es load is evaluated
604
610
// returns the error if any
605
- function doEvaluate ( loader , load , link , registry , registerRegistry , seen ) {
611
+ function doEvaluate ( loader , load , link , registry , state , seen ) {
606
612
seen . push ( load ) ;
607
613
608
614
var err ;
@@ -625,7 +631,7 @@ function doEvaluate (loader, load, link, registry, registerRegistry, seen) {
625
631
else
626
632
// dynamic / declarative boundaries clear the "seen" list
627
633
// we just let cross format circular throw as would happen in real implementations
628
- err = doEvaluate ( loader , depLoad , depLink , registry , registerRegistry , depLink . setters ? seen : [ ] ) ;
634
+ err = doEvaluate ( loader , depLoad , depLink , registry , state , depLink . setters ? seen : [ ] ) ;
629
635
}
630
636
631
637
if ( err )
@@ -655,7 +661,7 @@ function doEvaluate (loader, load, link, registry, registerRegistry, seen) {
655
661
}
656
662
} ) ;
657
663
err = doExecute ( link . execute , module . exports , [
658
- makeDynamicRequire ( loader , load . key , link . dependencies , link . dependencyInstantiations , registry , registerRegistry , seen ) ,
664
+ makeDynamicRequire ( loader , load . key , link . dependencies , link . dependencyInstantiations , registry , state , seen ) ,
659
665
module . exports ,
660
666
module
661
667
] ) ;
0 commit comments