Skip to content

Commit b046c3a

Browse files
committed
Merge pull request microsoft#4980 from csnover/fix-4952
Put AMD dependency list inline with define call in UMD modules
2 parents 7d257b2 + f396904 commit b046c3a

11 files changed

Lines changed: 73 additions & 49 deletions

src/compiler/emitter.ts

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6406,19 +6406,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
64066406
write("});");
64076407
}
64086408

6409-
function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean) {
6410-
// An AMD define function has the following shape:
6411-
// define(id?, dependencies?, factory);
6412-
//
6413-
// This has the shape of
6414-
// define(name, ["module1", "module2"], function (module1Alias) {
6415-
// The location of the alias in the parameter list in the factory function needs to
6416-
// match the position of the module name in the dependency list.
6417-
//
6418-
// To ensure this is true in cases of modules with no aliases, e.g.:
6419-
// `import "module"` or `<amd-dependency path= "a.css" />`
6420-
// we need to add modules without alias names to the end of the dependencies list
6409+
interface AMDDependencyNames {
6410+
aliasedModuleNames: string[];
6411+
unaliasedModuleNames: string[];
6412+
importAliasNames: string[];
6413+
}
64216414

6415+
function getAMDDependencyNames(node: SourceFile, includeNonAmdDependencies: boolean): AMDDependencyNames {
64226416
// names of modules with corresponding parameter in the factory function
64236417
let aliasedModuleNames: string[] = [];
64246418
// names of modules with no corresponding parameters in factory function
@@ -6453,6 +6447,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
64536447
}
64546448
}
64556449

6450+
return { aliasedModuleNames, unaliasedModuleNames, importAliasNames };
6451+
}
6452+
6453+
function emitAMDDependencies(node: SourceFile, includeNonAmdDependencies: boolean) {
6454+
// An AMD define function has the following shape:
6455+
// define(id?, dependencies?, factory);
6456+
//
6457+
// This has the shape of
6458+
// define(name, ["module1", "module2"], function (module1Alias) {
6459+
// The location of the alias in the parameter list in the factory function needs to
6460+
// match the position of the module name in the dependency list.
6461+
//
6462+
// To ensure this is true in cases of modules with no aliases, e.g.:
6463+
// `import "module"` or `<amd-dependency path= "a.css" />`
6464+
// we need to add modules without alias names to the end of the dependencies list
6465+
6466+
let dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies);
6467+
emitAMDDependencyList(dependencyNames);
6468+
write(", ");
6469+
emitAMDFactoryHeader(dependencyNames);
6470+
}
6471+
6472+
function emitAMDDependencyList({ aliasedModuleNames, unaliasedModuleNames }: AMDDependencyNames) {
64566473
write("[\"require\", \"exports\"");
64576474
if (aliasedModuleNames.length) {
64586475
write(", ");
@@ -6462,11 +6479,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
64626479
write(", ");
64636480
write(unaliasedModuleNames.join(", "));
64646481
}
6465-
write("], function (require, exports");
6482+
write("]");
6483+
}
6484+
6485+
function emitAMDFactoryHeader({ importAliasNames }: AMDDependencyNames) {
6486+
write("function (require, exports");
64666487
if (importAliasNames.length) {
64676488
write(", ");
64686489
write(importAliasNames.join(", "));
64696490
}
6491+
write(") {");
64706492
}
64716493

64726494
function emitAMDModule(node: SourceFile, startIndex: number) {
@@ -6479,7 +6501,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
64796501
write("\"" + node.moduleName + "\", ");
64806502
}
64816503
emitAMDDependencies(node, /*includeNonAmdDependencies*/ true);
6482-
write(") {");
64836504
increaseIndent();
64846505
emitExportStarHelper();
64856506
emitCaptureThisForNodeIfNecessary(node);
@@ -6505,17 +6526,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
65056526
emitEmitHelpers(node);
65066527
collectExternalModuleInfo(node);
65076528

6529+
let dependencyNames = getAMDDependencyNames(node, /*includeNonAmdDependencies*/ false);
6530+
65086531
// Module is detected first to support Browserify users that load into a browser with an AMD loader
6509-
writeLines(`(function (deps, factory) {
6532+
writeLines(`(function (factory) {
65106533
if (typeof module === 'object' && typeof module.exports === 'object') {
65116534
var v = factory(require, exports); if (v !== undefined) module.exports = v;
65126535
}
65136536
else if (typeof define === 'function' && define.amd) {
6514-
define(deps, factory);
6515-
}
6537+
define(`);
6538+
emitAMDDependencyList(dependencyNames);
6539+
write(", factory);");
6540+
writeLines(` }
65166541
})(`);
6517-
emitAMDDependencies(node, false);
6518-
write(") {");
6542+
emitAMDFactoryHeader(dependencyNames);
65196543
increaseIndent();
65206544
emitExportStarHelper();
65216545
emitCaptureThisForNodeIfNecessary(node);

tests/baselines/reference/es5-umd2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ export class A
1515

1616

1717
//// [es5-umd2.js]
18-
(function (deps, factory) {
18+
(function (factory) {
1919
if (typeof module === 'object' && typeof module.exports === 'object') {
2020
var v = factory(require, exports); if (v !== undefined) module.exports = v;
2121
}
2222
else if (typeof define === 'function' && define.amd) {
23-
define(deps, factory);
23+
define(["require", "exports"], factory);
2424
}
25-
})(["require", "exports"], function (require, exports) {
25+
})(function (require, exports) {
2626
var A = (function () {
2727
function A() {
2828
}

tests/baselines/reference/es5-umd3.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ export default class A
1515

1616

1717
//// [es5-umd3.js]
18-
(function (deps, factory) {
18+
(function (factory) {
1919
if (typeof module === 'object' && typeof module.exports === 'object') {
2020
var v = factory(require, exports); if (v !== undefined) module.exports = v;
2121
}
2222
else if (typeof define === 'function' && define.amd) {
23-
define(deps, factory);
23+
define(["require", "exports"], factory);
2424
}
25-
})(["require", "exports"], function (require, exports) {
25+
})(function (require, exports) {
2626
var A = (function () {
2727
function A() {
2828
}

tests/baselines/reference/es5-umd4.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ export = A;
1717

1818

1919
//// [es5-umd4.js]
20-
(function (deps, factory) {
20+
(function (factory) {
2121
if (typeof module === 'object' && typeof module.exports === 'object') {
2222
var v = factory(require, exports); if (v !== undefined) module.exports = v;
2323
}
2424
else if (typeof define === 'function' && define.amd) {
25-
define(deps, factory);
25+
define(["require", "exports"], factory);
2626
}
27-
})(["require", "exports"], function (require, exports) {
27+
})(function (require, exports) {
2828
var A = (function () {
2929
function A() {
3030
}

tests/baselines/reference/es6-umd2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ export class A
1414
}
1515

1616
//// [es6-umd2.js]
17-
(function (deps, factory) {
17+
(function (factory) {
1818
if (typeof module === 'object' && typeof module.exports === 'object') {
1919
var v = factory(require, exports); if (v !== undefined) module.exports = v;
2020
}
2121
else if (typeof define === 'function' && define.amd) {
22-
define(deps, factory);
22+
define(["require", "exports"], factory);
2323
}
24-
})(["require", "exports"], function (require, exports) {
24+
})(function (require, exports) {
2525
class A {
2626
constructor() {
2727
}

tests/baselines/reference/exportNonInitializedVariablesUMD.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ export let h1: D = new D;
3535

3636

3737
//// [exportNonInitializedVariablesUMD.js]
38-
(function (deps, factory) {
38+
(function (factory) {
3939
if (typeof module === 'object' && typeof module.exports === 'object') {
4040
var v = factory(require, exports); if (v !== undefined) module.exports = v;
4141
}
4242
else if (typeof define === 'function' && define.amd) {
43-
define(deps, factory);
43+
define(["require", "exports"], factory);
4444
}
45-
})(["require", "exports"], function (require, exports) {
45+
})(function (require, exports) {
4646
var ;
4747
let;
4848
var ;

tests/baselines/reference/isolatedModulesPlainFile-UMD.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ run(1);
55

66

77
//// [isolatedModulesPlainFile-UMD.js]
8-
(function (deps, factory) {
8+
(function (factory) {
99
if (typeof module === 'object' && typeof module.exports === 'object') {
1010
var v = factory(require, exports); if (v !== undefined) module.exports = v;
1111
}
1212
else if (typeof define === 'function' && define.amd) {
13-
define(deps, factory);
13+
define(["require", "exports"], factory);
1414
}
15-
})(["require", "exports"], function (require, exports) {
15+
})(function (require, exports) {
1616
run(1);
1717
});

tests/baselines/reference/umdDependencyComment2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ m1.f();
77

88
//// [umdDependencyComment2.js]
99
///<amd-dependency path='bar'/>
10-
(function (deps, factory) {
10+
(function (factory) {
1111
if (typeof module === 'object' && typeof module.exports === 'object') {
1212
var v = factory(require, exports); if (v !== undefined) module.exports = v;
1313
}
1414
else if (typeof define === 'function' && define.amd) {
15-
define(deps, factory);
15+
define(["require", "exports", "bar", "m2"], factory);
1616
}
17-
})(["require", "exports", "bar", "m2"], function (require, exports) {
17+
})(function (require, exports) {
1818
var m1 = require("m2");
1919
m1.f();
2020
});

tests/baselines/reference/umdDependencyCommentName1.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ m1.f();
77

88
//// [umdDependencyCommentName1.js]
99
///<amd-dependency path='bar' name='b'/>
10-
(function (deps, factory) {
10+
(function (factory) {
1111
if (typeof module === 'object' && typeof module.exports === 'object') {
1212
var v = factory(require, exports); if (v !== undefined) module.exports = v;
1313
}
1414
else if (typeof define === 'function' && define.amd) {
15-
define(deps, factory);
15+
define(["require", "exports", "bar", "m2"], factory);
1616
}
17-
})(["require", "exports", "bar", "m2"], function (require, exports, b) {
17+
})(function (require, exports, b) {
1818
var m1 = require("m2");
1919
m1.f();
2020
});

tests/baselines/reference/umdDependencyCommentName2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ m1.f();
1111
///<amd-dependency path='bar' name='b'/>
1212
///<amd-dependency path='foo'/>
1313
///<amd-dependency path='goo' name='c'/>
14-
(function (deps, factory) {
14+
(function (factory) {
1515
if (typeof module === 'object' && typeof module.exports === 'object') {
1616
var v = factory(require, exports); if (v !== undefined) module.exports = v;
1717
}
1818
else if (typeof define === 'function' && define.amd) {
19-
define(deps, factory);
19+
define(["require", "exports", "bar", "goo", "foo", "m2"], factory);
2020
}
21-
})(["require", "exports", "bar", "goo", "foo", "m2"], function (require, exports, b, c) {
21+
})(function (require, exports, b, c) {
2222
var m1 = require("m2");
2323
m1.f();
2424
});

0 commit comments

Comments
 (0)