diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 51e919ee8ee..db2a749c4d8 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -6406,19 +6406,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write("});");
}
- function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean) {
- // An AMD define function has the following shape:
- // define(id?, dependencies?, factory);
- //
- // This has the shape of
- // define(name, ["module1", "module2"], function (module1Alias) {
- // The location of the alias in the parameter list in the factory function needs to
- // match the position of the module name in the dependency list.
- //
- // To ensure this is true in cases of modules with no aliases, e.g.:
- // `import "module"` or ``
- // we need to add modules without alias names to the end of the dependencies list
+ interface AMDDependencyNames {
+ aliasedModuleNames: string[];
+ unaliasedModuleNames: string[];
+ importAliasNames: string[];
+ }
+ function getAMDDependencyNames(node: SourceFile, includeNonAmdDependencies: boolean): AMDDependencyNames {
// names of modules with corresponding parameter in the factory function
let aliasedModuleNames: string[] = [];
// names of modules with no corresponding parameters in factory function
@@ -6453,6 +6447,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
}
+ return { aliasedModuleNames, unaliasedModuleNames, importAliasNames };
+ }
+
+ function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean) {
+ // An AMD define function has the following shape:
+ // define(id?, dependencies?, factory);
+ //
+ // This has the shape of
+ // define(name, ["module1", "module2"], function (module1Alias) {
+ // The location of the alias in the parameter list in the factory function needs to
+ // match the position of the module name in the dependency list.
+ //
+ // To ensure this is true in cases of modules with no aliases, e.g.:
+ // `import "module"` or ``
+ // we need to add modules without alias names to the end of the dependencies list
+
+ let dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies);
+ emitAMDDependencyList(dependencyNames);
+ write(", ");
+ emitAMDFactoryHeader(dependencyNames);
+ }
+
+ function emitAMDDependencyList({ aliasedModuleNames, unaliasedModuleNames }: AMDDependencyNames) {
write("[\"require\", \"exports\"");
if (aliasedModuleNames.length) {
write(", ");
@@ -6462,11 +6479,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write(", ");
write(unaliasedModuleNames.join(", "));
}
- write("], function (require, exports");
+ write("]");
+ }
+
+ function emitAMDFactoryHeader({ importAliasNames }: AMDDependencyNames) {
+ write("function (require, exports");
if (importAliasNames.length) {
write(", ");
write(importAliasNames.join(", "));
}
+ write(") {");
}
function emitAMDModule(node: SourceFile, startIndex: number) {
@@ -6479,7 +6501,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write("\"" + node.moduleName + "\", ");
}
emitAMDDependencies(node, /*includeNonAmdDependencies*/ true);
- write(") {");
increaseIndent();
emitExportStarHelper();
emitCaptureThisForNodeIfNecessary(node);
@@ -6505,17 +6526,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
emitEmitHelpers(node);
collectExternalModuleInfo(node);
+ let dependencyNames = getAMDDependencyNames(node, /*includeNonAmdDependencies*/ false);
+
// Module is detected first to support Browserify users that load into a browser with an AMD loader
- writeLines(`(function (deps, factory) {
+ writeLines(`(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
- }
+ define(`);
+ emitAMDDependencyList(dependencyNames);
+ write(", factory);");
+ writeLines(` }
})(`);
- emitAMDDependencies(node, false);
- write(") {");
+ emitAMDFactoryHeader(dependencyNames);
increaseIndent();
emitExportStarHelper();
emitCaptureThisForNodeIfNecessary(node);
diff --git a/tests/baselines/reference/es5-umd2.js b/tests/baselines/reference/es5-umd2.js
index 4267e7a3331..9b79f5f17b7 100644
--- a/tests/baselines/reference/es5-umd2.js
+++ b/tests/baselines/reference/es5-umd2.js
@@ -15,14 +15,14 @@ export class A
//// [es5-umd2.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
var A = (function () {
function A() {
}
diff --git a/tests/baselines/reference/es5-umd3.js b/tests/baselines/reference/es5-umd3.js
index 92ac306698a..042316b710e 100644
--- a/tests/baselines/reference/es5-umd3.js
+++ b/tests/baselines/reference/es5-umd3.js
@@ -15,14 +15,14 @@ export default class A
//// [es5-umd3.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
var A = (function () {
function A() {
}
diff --git a/tests/baselines/reference/es5-umd4.js b/tests/baselines/reference/es5-umd4.js
index 058ad545f42..81dcf440cb8 100644
--- a/tests/baselines/reference/es5-umd4.js
+++ b/tests/baselines/reference/es5-umd4.js
@@ -17,14 +17,14 @@ export = A;
//// [es5-umd4.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
var A = (function () {
function A() {
}
diff --git a/tests/baselines/reference/es6-umd2.js b/tests/baselines/reference/es6-umd2.js
index 04c17d49951..b87027b21b1 100644
--- a/tests/baselines/reference/es6-umd2.js
+++ b/tests/baselines/reference/es6-umd2.js
@@ -14,14 +14,14 @@ export class A
}
//// [es6-umd2.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
class A {
constructor() {
}
diff --git a/tests/baselines/reference/exportNonInitializedVariablesUMD.js b/tests/baselines/reference/exportNonInitializedVariablesUMD.js
index 1e8b3ce4446..4b1e671669c 100644
--- a/tests/baselines/reference/exportNonInitializedVariablesUMD.js
+++ b/tests/baselines/reference/exportNonInitializedVariablesUMD.js
@@ -35,14 +35,14 @@ export let h1: D = new D;
//// [exportNonInitializedVariablesUMD.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
var ;
let;
var ;
diff --git a/tests/baselines/reference/isolatedModulesPlainFile-UMD.js b/tests/baselines/reference/isolatedModulesPlainFile-UMD.js
index 0ed6e83a37f..b4f8cf436ec 100644
--- a/tests/baselines/reference/isolatedModulesPlainFile-UMD.js
+++ b/tests/baselines/reference/isolatedModulesPlainFile-UMD.js
@@ -5,13 +5,13 @@ run(1);
//// [isolatedModulesPlainFile-UMD.js]
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports"], factory);
}
-})(["require", "exports"], function (require, exports) {
+})(function (require, exports) {
run(1);
});
diff --git a/tests/baselines/reference/umdDependencyComment2.js b/tests/baselines/reference/umdDependencyComment2.js
index cae34631517..f063df77308 100644
--- a/tests/baselines/reference/umdDependencyComment2.js
+++ b/tests/baselines/reference/umdDependencyComment2.js
@@ -7,14 +7,14 @@ m1.f();
//// [umdDependencyComment2.js]
///
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports", "bar", "m2"], factory);
}
-})(["require", "exports", "bar", "m2"], function (require, exports) {
+})(function (require, exports) {
var m1 = require("m2");
m1.f();
});
diff --git a/tests/baselines/reference/umdDependencyCommentName1.js b/tests/baselines/reference/umdDependencyCommentName1.js
index 6cb87eb45f5..763e0523272 100644
--- a/tests/baselines/reference/umdDependencyCommentName1.js
+++ b/tests/baselines/reference/umdDependencyCommentName1.js
@@ -7,14 +7,14 @@ m1.f();
//// [umdDependencyCommentName1.js]
///
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports", "bar", "m2"], factory);
}
-})(["require", "exports", "bar", "m2"], function (require, exports, b) {
+})(function (require, exports, b) {
var m1 = require("m2");
m1.f();
});
diff --git a/tests/baselines/reference/umdDependencyCommentName2.js b/tests/baselines/reference/umdDependencyCommentName2.js
index d474454936d..f749e4cc22d 100644
--- a/tests/baselines/reference/umdDependencyCommentName2.js
+++ b/tests/baselines/reference/umdDependencyCommentName2.js
@@ -11,14 +11,14 @@ m1.f();
///
///
///
-(function (deps, factory) {
+(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
- define(deps, factory);
+ define(["require", "exports", "bar", "goo", "foo", "m2"], factory);
}
-})(["require", "exports", "bar", "goo", "foo", "m2"], function (require, exports, b, c) {
+})(function (require, exports, b, c) {
var m1 = require("m2");
m1.f();
});
diff --git a/tests/cases/unittests/transpile.ts b/tests/cases/unittests/transpile.ts
index 9336c323bb4..ca7d1faa4a9 100644
--- a/tests/cases/unittests/transpile.ts
+++ b/tests/cases/unittests/transpile.ts
@@ -202,14 +202,14 @@ var x = 0;`,
`declare function use(a: any);\n` +
`use(foo);`
let output =
- `(function (deps, factory) {\n` +
+ `(function (factory) {\n` +
` if (typeof module === 'object' && typeof module.exports === 'object') {\n` +
` var v = factory(require, exports); if (v !== undefined) module.exports = v;\n` +
` }\n` +
` else if (typeof define === 'function' && define.amd) {\n` +
- ` define(deps, factory);\n` +
+ ` define(["require", "exports", "SomeOtherName"], factory);\n` +
` }\n` +
- `})(["require", "exports", "SomeOtherName"], function (require, exports) {\n` +
+ `})(function (require, exports) {\n` +
` var SomeName_1 = require("SomeOtherName");\n` +
` use(SomeName_1.foo);\n` +
`});\n`;