diff --git a/src/extras/amd.js b/src/extras/amd.js index d5eaeaa5..f5130280 100644 --- a/src/extras/amd.js +++ b/src/extras/amd.js @@ -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; diff --git a/test/browser/named-register.js b/test/browser/named-register.js index baadb072..47bda077 100644 --- a/test/browser/named-register.js +++ b/test/browser/named-register.js @@ -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'); + }); + }); }); \ No newline at end of file