aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/systemjs/lib/global.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-10-10 03:50:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-10-10 03:50:11 +0200
commitde4628b3a7e7618681a76c01d00c1632a96688cf (patch)
tree49d4d97cf1c591b8567c83aa2469522f7fa57d27 /thirdparty/systemjs/lib/global.js
parent7989859ed6520d4e8d18f48545e5998bf66e253c (diff)
parent9af485a584e47fd503ed5c62b9f6482574715f1e (diff)
Merge commit '9af485a584e47fd503ed5c62b9f6482574715f1e' as 'thirdparty/systemjs'
Diffstat (limited to 'thirdparty/systemjs/lib/global.js')
-rw-r--r--thirdparty/systemjs/lib/global.js70
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);
+ };
+});