Supporting multiple define variations for named modules. Resolves #2118. (#2119)

* Supporting multiple define variations for named modules. Resolves #2118.

* Self review
This commit is contained in:
Joel Denning 2020-02-07 09:09:02 -07:00 committed by GitHub
parent 2ff58c9e88
commit dfdba67f65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 17 deletions

View File

@ -115,39 +115,43 @@
global.define = function (name, deps, execute) {
// define('', [], function () {})
if (typeof name === 'string') {
const depsAndExec = getDepsAndExec(deps, execute);
if (amdDefineDeps) {
if (!System.registerRegistry)
throw Error('Include the named register extension for SystemJS named AMD support.');
addToRegisterRegistry(name, createAMDRegister(deps, execute));
addToRegisterRegistry(name, createAMDRegister(depsAndExec[0], depsAndExec[1]));
amdDefineDeps = [];
amdDefineExec = emptyFn;
return;
}
else {
if (System.registerRegistry)
addToRegisterRegistry(name, createAMDRegister([].concat(deps), execute));
addToRegisterRegistry(name, createAMDRegister([].concat(depsAndExec[0]), depsAndExec[1]));
name = deps;
deps = execute;
}
}
// define([], function () {})
if (name instanceof Array) {
amdDefineDeps = name;
amdDefineExec = deps;
}
// define({})
else if (typeof name === 'object') {
amdDefineDeps = [];
amdDefineExec = function () { return name };
}
// define(function () {})
else if (typeof name === 'function') {
amdDefineDeps = requireExportsModule;
amdDefineExec = name;
}
const depsAndExec = getDepsAndExec(name, deps);
amdDefineDeps = depsAndExec[0];
amdDefineExec = depsAndExec[1];
};
global.define.amd = {};
function getDepsAndExec(arg1, arg2) {
// define([], function () {})
if (arg1 instanceof Array) {
return [arg1, arg2];
}
// define({})
else if (typeof arg1 === 'object') {
return [[], function () { return arg1 }];
}
// define(function () {})
else if (typeof arg1 === 'function') {
return [requireExportsModule, arg1];
}
}
function addToRegisterRegistry(name, define) {
if (!firstNamedDefine) {
firstNamedDefine = define;

View File

@ -88,4 +88,24 @@ suite('Named System.register', function() {
assert.equal(m.default, 'The module depending on the named thing');
});
});
// https://github.com/systemjs/systemjs/issues/2118
test('named define without dependencies specified', function () {
define('named-define-no-deps', function () {
return 'The named-define-no-deps module';
});
return System.import('named-define-no-deps').then(function (m) {
assert.equal(m.default, 'The named-define-no-deps module');
});
});
// https://github.com/systemjs/systemjs/issues/2118
test('named define with object', function () {
define('named-define-object', { hello: 'there' });
return System.import('named-define-object').then(function (m) {
assert.equal(m.hello, 'there');
});
});
});