mirror of
https://github.com/systemjs/systemjs.git
synced 2026-01-25 14:57:38 +00:00
97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
(function(global) {
|
|
|
|
var head = document.getElementsByTagName('head')[0];
|
|
|
|
// override fetch to use script injection
|
|
System.fetch = function(load) {
|
|
// if already defined, skip
|
|
if (System.defined[load.name])
|
|
return '';
|
|
|
|
// script injection fetch system
|
|
return new Promise(function(resolve, reject) {
|
|
var s = document.createElement('script');
|
|
s.async = true;
|
|
s.addEventListener('load', function(evt) {
|
|
if (lastAnonymous)
|
|
System.defined[load.name] = lastAnonymous;
|
|
lastAnonymous = null;
|
|
resolve('');
|
|
}, false);
|
|
s.addEventListener('error', function(err) {
|
|
reject(err);
|
|
}, false);
|
|
s.src = load.address;
|
|
head.appendChild(s);
|
|
});
|
|
}
|
|
var lastAnonymous = null;
|
|
global.define = function(name, deps, factory) {
|
|
// anonymous define
|
|
if (typeof name != 'string') {
|
|
factory = deps;
|
|
deps = name;
|
|
name = null;
|
|
}
|
|
|
|
if (!(deps instanceof Array)) {
|
|
factory = deps;
|
|
deps = [];
|
|
}
|
|
|
|
if (typeof factory != 'function')
|
|
factory = (function(factory) {
|
|
return function() { return factory; }
|
|
})(factory);
|
|
|
|
for (var i = 0; i < deps.length; i++)
|
|
if (deps.lastIndexOf(deps[i]) != i)
|
|
deps.splice(i--, 1);
|
|
|
|
var instantiate = {
|
|
deps: deps,
|
|
execute: function() {
|
|
var args = [];
|
|
for (var i = 0; i < arguments.length; i++)
|
|
args.push(System.get(arguments[i]));
|
|
|
|
var output = factory.apply(this, args);
|
|
return new global.Module(output && output.__transpiledModule ? (delete output.__transpiledModule, output) : { __defaultOnly: true, 'default': output });
|
|
}
|
|
};
|
|
|
|
if (name)
|
|
System.defined[name] = instantiate;
|
|
else
|
|
lastAnonymous = instantiate;
|
|
}
|
|
global.define.amd = {};
|
|
|
|
// no translate at all
|
|
System.translate = function() {}
|
|
|
|
|
|
/*
|
|
AMD-compatible require
|
|
To copy RequireJS, set window.require = window.requirejs = System.requirejs
|
|
*/
|
|
var require = System.requirejs = function(names, callback, errback, referer) {
|
|
// in amd, first arg can be a config object... we just ignore
|
|
if (typeof names == 'object' && !(names instanceof Array))
|
|
return require.apply(null, Array.prototype.splice.call(arguments, 1));
|
|
|
|
// amd require
|
|
if (names instanceof Array)
|
|
Promise.all(names.map(function(name) {
|
|
return System.import(name, referer);
|
|
})).then(callback, errback);
|
|
|
|
// commonjs require
|
|
else if (typeof names == 'string')
|
|
return System.get(names);
|
|
|
|
else
|
|
throw 'Invalid require';
|
|
}
|
|
|
|
})(typeof window != 'undefined' ? window : global); |