Skip to content

Commit 68de040

Browse files
Fixed 'declare' modifier (refs #136)
1 parent e820ec7 commit 68de040

File tree

4 files changed

+113
-34
lines changed

4 files changed

+113
-34
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,15 @@ private void emitNamespace(TsModel model) {
9696
writeIndentedLine("}");
9797
} else {
9898
final boolean exportElements = settings.outputKind == TypeScriptOutputKind.module;
99-
final boolean declareElements = settings.outputKind == TypeScriptOutputKind.global;
99+
final boolean declareElements = settings.outputFileType == TypeScriptFileType.declarationFile && settings.outputKind == TypeScriptOutputKind.global;
100100
emitElements(model, exportElements, declareElements);
101101
}
102102
}
103103

104104
private void emitElements(TsModel model, boolean exportKeyword, boolean declareKeyword) {
105105
exportKeyword = exportKeyword || forceExportKeyword;
106-
emitBeans(model, exportKeyword);
107-
emitTypeAliases(model, exportKeyword);
106+
emitBeans(model, exportKeyword, declareKeyword);
107+
emitTypeAliases(model, exportKeyword, declareKeyword);
108108
emitNumberEnums(model, exportKeyword, declareKeyword);
109109
emitHelpers(model);
110110
for (EmitterExtension emitterExtension : settings.extensions) {
@@ -115,15 +115,15 @@ private void emitElements(TsModel model, boolean exportKeyword, boolean declareK
115115
}
116116
}
117117

118-
private void emitBeans(TsModel model, boolean exportKeyword) {
118+
private void emitBeans(TsModel model, boolean exportKeyword, boolean declareKeyword) {
119119
for (TsBeanModel bean : model.getBeans()) {
120-
emitFullyQualifiedDeclaration(bean, exportKeyword, false);
120+
emitFullyQualifiedDeclaration(bean, exportKeyword, declareKeyword);
121121
}
122122
}
123123

124-
private void emitTypeAliases(TsModel model, boolean exportKeyword) {
124+
private void emitTypeAliases(TsModel model, boolean exportKeyword, boolean declareKeyword) {
125125
for (TsAliasModel alias : model.getTypeAliases()) {
126-
emitFullyQualifiedDeclaration(alias, exportKeyword, false);
126+
emitFullyQualifiedDeclaration(alias, exportKeyword, declareKeyword);
127127
}
128128
}
129129

@@ -139,9 +139,10 @@ private void emitNumberEnums(TsModel model, boolean exportKeyword, boolean decla
139139
private void emitFullyQualifiedDeclaration(TsDeclarationModel declaration, boolean exportKeyword, boolean declareKeyword) {
140140
if (declaration.getName().getNamespace() != null) {
141141
writeNewLine();
142-
writeIndentedLine(exportKeyword, "namespace " + declaration.getName().getNamespace() + " {");
142+
final String prefix = declareKeyword ? "declare " : "";
143+
writeIndentedLine(exportKeyword, prefix + "namespace " + declaration.getName().getNamespace() + " {");
143144
indent++;
144-
emitDeclaration(declaration, true, declareKeyword);
145+
emitDeclaration(declaration, true, false);
145146
indent--;
146147
writeNewLine();
147148
writeIndentedLine("}");

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,40 @@ public class ModulesAndNamespacesTest {
1313

1414
@Test
1515
public void testNamespacesAndModules() {
16-
final File outputDir = new File("target/test-ts-modules");
16+
files(new File("target/test-ts-modules"), false);
17+
files(new File("target/test-ts-modules-pkg"), true);
18+
}
19+
20+
public void files(File outputDir, boolean mapPackages) {
1721
outputDir.mkdirs();
1822

19-
file("Test1", null, null, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
20-
file("Test2", null, "NS2", TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
21-
file("Test3a", "mod3a", null, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
22-
file("Test3b", null, null, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
23-
file("Test4a", "mod4a", "NS4a", TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
24-
file("Test4b", null, "NS4b", TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));
25-
26-
file("Test5", null, null, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
27-
file("Test6", null, "NS6", TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
28-
file("Test7", null, null, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
29-
file("Test8", null, "NS8", TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
23+
file("Test1", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
24+
file("Test2", null, "NS2", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
25+
file("Test3a", "mod3a", null, mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
26+
file("Test3b", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
27+
file("Test4a", "mod4a", "NS4a", mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
28+
file("Test4b", null, "NS4b", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));
29+
30+
file("Test5", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
31+
file("Test6", null, "NS6", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
32+
file("Test7", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
33+
file("Test8", null, "NS8", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
3034
}
3135

32-
private static void file(String prefix, String module, String namespace, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
36+
private static void file(String prefix, String module, String namespace, boolean mapPackagesToNamespaces, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
3337
final Settings settings = new Settings();
3438
settings.jsonLibrary = JsonLibrary.jackson2;
3539
settings.addTypeNamePrefix = prefix;
3640
settings.module = module;
3741
settings.namespace = namespace;
42+
settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
3843
settings.outputKind = outputKind;
3944
settings.outputFileType = outputFileType;
4045
if (outputFileType == TypeScriptFileType.implementationFile) {
41-
settings.extensions.add(new TestFunctionExtention());
46+
settings.mapClasses = ClassMapping.asClasses;
47+
}
48+
if (outputFileType == TypeScriptFileType.implementationFile && !mapPackagesToNamespaces) {
49+
settings.extensions.add(new TestFunctionExtension());
4250
}
4351
new TypeScriptGenerator(settings).generateTypeScript(Input.from(Data.class, Direction.class, Align.class), Output.to(output));
4452
}
@@ -59,12 +67,13 @@ enum Align {
5967
Right
6068
}
6169

62-
private static class TestFunctionExtention extends EmitterExtension {
70+
private static class TestFunctionExtension extends EmitterExtension {
6371

6472
@Override
6573
public EmitterExtensionFeatures getFeatures() {
6674
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
6775
features.generatesRuntimeCode = true;
76+
features.worksWithPackagesMappedToNamespaces = true;
6877
return features;
6978
}
7079

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn1.d.ts" />
3+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn2.d.ts" />
4+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn3a.d.ts" />
5+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn4a.d.ts" />
6+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn5.ts" />
7+
/// <reference path="../../../target/test-ts-modules-pkg/test-mn6.ts" />
8+
9+
// declaration files
10+
11+
var a1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Data;
12+
var e1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Direction;
13+
var ne1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Align;
14+
15+
var a2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Data;
16+
var e2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Direction;
17+
var ne2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Align;
18+
19+
import * as mod3a from "mod3a";
20+
var a3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aData;
21+
var e3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aDirection;
22+
var ne3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aAlign;
23+
24+
import * as mod3b from "../../../target/test-ts-modules-pkg/test-mn3b";
25+
var a3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bData;
26+
var e3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bDirection;
27+
var ne3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bAlign;
28+
29+
import * as mod4a from "mod4a";
30+
var a4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aData;
31+
var e4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aDirection;
32+
var ne4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aAlign;
33+
34+
import * as mod4b from "../../../target/test-ts-modules-pkg/test-mn4b";
35+
var a4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bData;
36+
var e4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bDirection;
37+
var ne4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bAlign;
38+
39+
40+
// implementation files
41+
42+
var a5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Data;
43+
var e5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Direction;
44+
var ne5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Align;
45+
46+
var a6: NS6.Test6Data;
47+
var e6: NS6.Test6Direction;
48+
var ne6: NS6.Test6Align;
49+
50+
import * as mod7 from "../../../target/test-ts-modules-pkg/test-mn7";
51+
var a7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Data;
52+
var e7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Direction;
53+
var ne7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Align;
54+
55+
import * as mod8 from "../../../target/test-ts-modules-pkg/test-mn8";
56+
var a8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Data;
57+
var e8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Direction;
58+
var ne8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Align;

typescript-generator-core/src/test/ts/tsconfig.json

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,26 @@
88
},
99
"files": [
1010
"module-usage.ts",
11-
"../../../target/test-ts-modules/test-mn1.d.ts",
12-
"../../../target/test-ts-modules/test-mn2.d.ts",
13-
"../../../target/test-ts-modules/test-mn3a.d.ts",
14-
"../../../target/test-ts-modules/test-mn3b.d.ts",
15-
"../../../target/test-ts-modules/test-mn4a.d.ts",
16-
"../../../target/test-ts-modules/test-mn4b.d.ts",
17-
"../../../target/test-ts-modules/test-mn5.ts",
18-
"../../../target/test-ts-modules/test-mn6.ts",
19-
"../../../target/test-ts-modules/test-mn7.ts",
20-
"../../../target/test-ts-modules/test-mn8.ts"
11+
// "../../../target/test-ts-modules/test-mn1.d.ts",
12+
// "../../../target/test-ts-modules/test-mn2.d.ts",
13+
// "../../../target/test-ts-modules/test-mn3a.d.ts",
14+
// "../../../target/test-ts-modules/test-mn3b.d.ts",
15+
// "../../../target/test-ts-modules/test-mn4a.d.ts",
16+
// "../../../target/test-ts-modules/test-mn4b.d.ts",
17+
// "../../../target/test-ts-modules/test-mn5.ts",
18+
// "../../../target/test-ts-modules/test-mn6.ts",
19+
// "../../../target/test-ts-modules/test-mn7.ts",
20+
// "../../../target/test-ts-modules/test-mn8.ts",
21+
"module-usage-pkg.ts"
22+
// "../../../target/test-ts-modules-pkg/test-mn1.d.ts",
23+
// "../../../target/test-ts-modules-pkg/test-mn2.d.ts",
24+
// "../../../target/test-ts-modules-pkg/test-mn3a.d.ts",
25+
// "../../../target/test-ts-modules-pkg/test-mn3b.d.ts",
26+
// "../../../target/test-ts-modules-pkg/test-mn4a.d.ts",
27+
// "../../../target/test-ts-modules-pkg/test-mn4b.d.ts",
28+
// "../../../target/test-ts-modules-pkg/test-mn5.ts",
29+
// "../../../target/test-ts-modules-pkg/test-mn6.ts",
30+
// "../../../target/test-ts-modules-pkg/test-mn7.ts",
31+
// "../../../target/test-ts-modules-pkg/test-mn8.ts"
2132
]
2233
}

0 commit comments

Comments
 (0)