diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 349601a6db8e5..d32611457e1b7 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -270,6 +270,7 @@ module ts { Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: DiagnosticCategory.Error, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, Type_alias_0_circularly_references_itself: { code: 2456, category: DiagnosticCategory.Error, key: "Type alias '{0}' circularly references itself." }, Type_alias_name_cannot_be_0: { code: 2457, category: DiagnosticCategory.Error, key: "Type alias name cannot be '{0}'" }, + An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: DiagnosticCategory.Error, key: "An AMD module cannot have multiple name assignments." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7359abefb6048..ea639e2bb5bc8 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1076,6 +1076,10 @@ "category": "Error", "code": 2457 }, + "An AMD module cannot have multiple name assignments.": { + "category": "Error", + "code": 2458 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f61d4403eece6..4dfce94c928b9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2096,7 +2096,11 @@ module ts { function emitAMDModule(node: SourceFile, startIndex: number) { var imports = getExternalImportDeclarations(node); writeLine(); - write("define([\"require\", \"exports\""); + write("define("); + if(node.amdModuleName) { + write("\"" + node.amdModuleName + "\", "); + } + write("[\"require\", \"exports\""); forEach(imports, imp => { write(", "); emitLiteral(imp.externalModuleName); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4849cb8c89e5b..ae3e065bfc327 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -20,6 +20,7 @@ module ts { interface ReferenceComments { referencedFiles: FileReference[]; amdDependencies: string[]; + amdModuleName: string; } export function getSourceFileOfNode(node: Node): SourceFile { @@ -4218,6 +4219,7 @@ module ts { function processReferenceComments(): ReferenceComments { var referencedFiles: FileReference[] = []; var amdDependencies: string[] = []; + var amdModuleName: string; commentRanges = []; token = scanner.scan(); @@ -4237,6 +4239,15 @@ module ts { } } else { + var amdModuleNameRegEx = /^\/\/\/\s* +class Foo { + x: number; + constructor() { + this.x = 5; + } +} +export = Foo; + + +//// [amdModuleName1.js] +define("NamedModule", ["require", "exports"], function (require, exports) { + /// + var Foo = (function () { + function Foo() { + this.x = 5; + } + return Foo; + })(); + return Foo; +}); diff --git a/tests/baselines/reference/amdModuleName1.types b/tests/baselines/reference/amdModuleName1.types new file mode 100644 index 0000000000000..02ad947235431 --- /dev/null +++ b/tests/baselines/reference/amdModuleName1.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/amdModuleName1.ts === +/// +class Foo { +>Foo : Foo + + x: number; +>x : number + + constructor() { + this.x = 5; +>this.x = 5 : number +>this.x : number +>this : Foo +>x : number + } +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/amdModuleName2.errors.txt b/tests/baselines/reference/amdModuleName2.errors.txt new file mode 100644 index 0000000000000..911f31a1f4bea --- /dev/null +++ b/tests/baselines/reference/amdModuleName2.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments. + + +==== tests/cases/compiler/amdModuleName2.ts (1 errors) ==== + /// + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2458: An AMD module cannot have multiple name assignments. + class Foo { + x: number; + constructor() { + this.x = 5; + } + } + export = Foo; + \ No newline at end of file diff --git a/tests/cases/compiler/amdModuleName1.ts b/tests/cases/compiler/amdModuleName1.ts new file mode 100644 index 0000000000000..fef7956e3329f --- /dev/null +++ b/tests/cases/compiler/amdModuleName1.ts @@ -0,0 +1,9 @@ +//@module: amd +/// +class Foo { + x: number; + constructor() { + this.x = 5; + } +} +export = Foo; diff --git a/tests/cases/compiler/amdModuleName2.ts b/tests/cases/compiler/amdModuleName2.ts new file mode 100644 index 0000000000000..cca02a2265078 --- /dev/null +++ b/tests/cases/compiler/amdModuleName2.ts @@ -0,0 +1,10 @@ +//@module: amd +/// +/// +class Foo { + x: number; + constructor() { + this.x = 5; + } +} +export = Foo;