diff options
Diffstat (limited to 'thirdparty/systemjs/lib/global.js')
-rw-r--r-- | thirdparty/systemjs/lib/global.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/thirdparty/systemjs/lib/global.js b/thirdparty/systemjs/lib/global.js new file mode 100644 index 000000000..b86a4d045 --- /dev/null +++ b/thirdparty/systemjs/lib/global.js @@ -0,0 +1,70 @@ +/* + SystemJS Global Format + + Supports + metadata.deps + metadata.globals + metadata.exports + + Without metadata.exports, detects writes to the global object. +*/ +var __globalName = typeof self != 'undefined' ? 'self' : 'global'; + +hook('fetch', function(fetch) { + return function(load) { + if (load.metadata.exports && !load.metadata.format) + load.metadata.format = 'global'; + return fetch.call(this, load); + }; +}); + +// ideally we could support script loading for globals, but the issue with that is that +// we can't do it with AMD support side-by-side since AMD support means defining the +// global define, and global support means not definining it, yet we don't have any hook +// into the "pre-execution" phase of a script tag being loaded to handle both cases +hook('instantiate', function(instantiate) { + return function(load) { + var loader = this; + + if (!load.metadata.format) + load.metadata.format = 'global'; + + // global is a fallback module format + if (load.metadata.format == 'global' && !load.metadata.entry) { + + var entry = createEntry(); + + load.metadata.entry = entry; + + entry.deps = []; + + for (var g in load.metadata.globals) { + var gl = load.metadata.globals[g]; + if (gl) + entry.deps.push(gl); + } + + entry.execute = function(require, exports, module) { + + var globals; + if (load.metadata.globals) { + globals = {}; + for (var g in load.metadata.globals) + if (load.metadata.globals[g]) + globals[g] = require(load.metadata.globals[g]); + } + + var exportName = load.metadata.exports; + + if (exportName) + load.source += '\n' + __globalName + '["' + exportName + '"] = ' + exportName + ';'; + + var retrieveGlobal = loader.get('@@global-helpers').prepareGlobal(module.id, exportName, globals, !!load.metadata.encapsulateGlobal); + __exec.call(loader, load); + + return retrieveGlobal(); + } + } + return instantiate.call(this, load); + }; +}); |