diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java
index 5c7ac1a0a..cbeee6d2c 100644
--- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java
+++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java
@@ -96,15 +96,15 @@ private void emitNamespace(TsModel model) {
writeIndentedLine("}");
} else {
final boolean exportElements = settings.outputKind == TypeScriptOutputKind.module;
- final boolean declareElements = settings.outputKind == TypeScriptOutputKind.global;
+ final boolean declareElements = settings.outputFileType == TypeScriptFileType.declarationFile && settings.outputKind == TypeScriptOutputKind.global;
emitElements(model, exportElements, declareElements);
}
}
private void emitElements(TsModel model, boolean exportKeyword, boolean declareKeyword) {
exportKeyword = exportKeyword || forceExportKeyword;
- emitBeans(model, exportKeyword);
- emitTypeAliases(model, exportKeyword);
+ emitBeans(model, exportKeyword, declareKeyword);
+ emitTypeAliases(model, exportKeyword, declareKeyword);
emitNumberEnums(model, exportKeyword, declareKeyword);
emitHelpers(model);
for (EmitterExtension emitterExtension : settings.extensions) {
@@ -115,15 +115,15 @@ private void emitElements(TsModel model, boolean exportKeyword, boolean declareK
}
}
- private void emitBeans(TsModel model, boolean exportKeyword) {
+ private void emitBeans(TsModel model, boolean exportKeyword, boolean declareKeyword) {
for (TsBeanModel bean : model.getBeans()) {
- emitFullyQualifiedDeclaration(bean, exportKeyword, false);
+ emitFullyQualifiedDeclaration(bean, exportKeyword, declareKeyword);
}
}
- private void emitTypeAliases(TsModel model, boolean exportKeyword) {
+ private void emitTypeAliases(TsModel model, boolean exportKeyword, boolean declareKeyword) {
for (TsAliasModel alias : model.getTypeAliases()) {
- emitFullyQualifiedDeclaration(alias, exportKeyword, false);
+ emitFullyQualifiedDeclaration(alias, exportKeyword, declareKeyword);
}
}
@@ -139,9 +139,10 @@ private void emitNumberEnums(TsModel model, boolean exportKeyword, boolean decla
private void emitFullyQualifiedDeclaration(TsDeclarationModel declaration, boolean exportKeyword, boolean declareKeyword) {
if (declaration.getName().getNamespace() != null) {
writeNewLine();
- writeIndentedLine(exportKeyword, "namespace " + declaration.getName().getNamespace() + " {");
+ final String prefix = declareKeyword ? "declare " : "";
+ writeIndentedLine(exportKeyword, prefix + "namespace " + declaration.getName().getNamespace() + " {");
indent++;
- emitDeclaration(declaration, true, declareKeyword);
+ emitDeclaration(declaration, true, false);
indent--;
writeNewLine();
writeIndentedLine("}");
diff --git a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java
index b7a17e7c0..773d3175c 100644
--- a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java
+++ b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java
@@ -13,32 +13,40 @@ public class ModulesAndNamespacesTest {
@Test
public void testNamespacesAndModules() {
- final File outputDir = new File("target/test-ts-modules");
+ files(new File("target/test-ts-modules"), false);
+ files(new File("target/test-ts-modules-pkg"), true);
+ }
+
+ public void files(File outputDir, boolean mapPackages) {
outputDir.mkdirs();
- file("Test1", null, null, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
- file("Test2", null, "NS2", TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
- file("Test3a", "mod3a", null, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
- file("Test3b", null, null, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
- file("Test4a", "mod4a", "NS4a", TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
- file("Test4b", null, "NS4b", TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));
-
- file("Test5", null, null, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
- file("Test6", null, "NS6", TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
- file("Test7", null, null, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
- file("Test8", null, "NS8", TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
+ file("Test1", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
+ file("Test2", null, "NS2", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
+ file("Test3a", "mod3a", null, mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
+ file("Test3b", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
+ file("Test4a", "mod4a", "NS4a", mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
+ file("Test4b", null, "NS4b", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));
+
+ file("Test5", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
+ file("Test6", null, "NS6", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
+ file("Test7", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
+ file("Test8", null, "NS8", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
}
- private static void file(String prefix, String module, String namespace, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
+ private static void file(String prefix, String module, String namespace, boolean mapPackagesToNamespaces, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
final Settings settings = new Settings();
settings.jsonLibrary = JsonLibrary.jackson2;
settings.addTypeNamePrefix = prefix;
settings.module = module;
settings.namespace = namespace;
+ settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
settings.outputKind = outputKind;
settings.outputFileType = outputFileType;
if (outputFileType == TypeScriptFileType.implementationFile) {
- settings.extensions.add(new TestFunctionExtention());
+ settings.mapClasses = ClassMapping.asClasses;
+ }
+ if (outputFileType == TypeScriptFileType.implementationFile && !mapPackagesToNamespaces) {
+ settings.extensions.add(new TestFunctionExtension());
}
new TypeScriptGenerator(settings).generateTypeScript(Input.from(Data.class, Direction.class, Align.class), Output.to(output));
}
@@ -59,12 +67,13 @@ enum Align {
Right
}
- private static class TestFunctionExtention extends EmitterExtension {
+ private static class TestFunctionExtension extends EmitterExtension {
@Override
public EmitterExtensionFeatures getFeatures() {
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
features.generatesRuntimeCode = true;
+ features.worksWithPackagesMappedToNamespaces = true;
return features;
}
diff --git a/typescript-generator-core/src/test/ts/module-usage-pkg.ts b/typescript-generator-core/src/test/ts/module-usage-pkg.ts
new file mode 100644
index 000000000..7792ca7a6
--- /dev/null
+++ b/typescript-generator-core/src/test/ts/module-usage-pkg.ts
@@ -0,0 +1,58 @@
+
+///
+///
+///
+///
+///
+///
+
+// declaration files
+
+var a1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Data;
+var e1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Direction;
+var ne1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Align;
+
+var a2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Data;
+var e2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Direction;
+var ne2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Align;
+
+import * as mod3a from "mod3a";
+var a3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aData;
+var e3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aDirection;
+var ne3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aAlign;
+
+import * as mod3b from "../../../target/test-ts-modules-pkg/test-mn3b";
+var a3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bData;
+var e3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bDirection;
+var ne3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bAlign;
+
+import * as mod4a from "mod4a";
+var a4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aData;
+var e4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aDirection;
+var ne4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aAlign;
+
+import * as mod4b from "../../../target/test-ts-modules-pkg/test-mn4b";
+var a4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bData;
+var e4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bDirection;
+var ne4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bAlign;
+
+
+// implementation files
+
+var a5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Data;
+var e5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Direction;
+var ne5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Align;
+
+var a6: NS6.Test6Data;
+var e6: NS6.Test6Direction;
+var ne6: NS6.Test6Align;
+
+import * as mod7 from "../../../target/test-ts-modules-pkg/test-mn7";
+var a7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Data;
+var e7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Direction;
+var ne7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Align;
+
+import * as mod8 from "../../../target/test-ts-modules-pkg/test-mn8";
+var a8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Data;
+var e8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Direction;
+var ne8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Align;
diff --git a/typescript-generator-core/src/test/ts/tsconfig.json b/typescript-generator-core/src/test/ts/tsconfig.json
index 3e2cd8da6..89bd22fd7 100644
--- a/typescript-generator-core/src/test/ts/tsconfig.json
+++ b/typescript-generator-core/src/test/ts/tsconfig.json
@@ -8,15 +8,26 @@
},
"files": [
"module-usage.ts",
- "../../../target/test-ts-modules/test-mn1.d.ts",
- "../../../target/test-ts-modules/test-mn2.d.ts",
- "../../../target/test-ts-modules/test-mn3a.d.ts",
- "../../../target/test-ts-modules/test-mn3b.d.ts",
- "../../../target/test-ts-modules/test-mn4a.d.ts",
- "../../../target/test-ts-modules/test-mn4b.d.ts",
- "../../../target/test-ts-modules/test-mn5.ts",
- "../../../target/test-ts-modules/test-mn6.ts",
- "../../../target/test-ts-modules/test-mn7.ts",
- "../../../target/test-ts-modules/test-mn8.ts"
+ // "../../../target/test-ts-modules/test-mn1.d.ts",
+ // "../../../target/test-ts-modules/test-mn2.d.ts",
+ // "../../../target/test-ts-modules/test-mn3a.d.ts",
+ // "../../../target/test-ts-modules/test-mn3b.d.ts",
+ // "../../../target/test-ts-modules/test-mn4a.d.ts",
+ // "../../../target/test-ts-modules/test-mn4b.d.ts",
+ // "../../../target/test-ts-modules/test-mn5.ts",
+ // "../../../target/test-ts-modules/test-mn6.ts",
+ // "../../../target/test-ts-modules/test-mn7.ts",
+ // "../../../target/test-ts-modules/test-mn8.ts",
+ "module-usage-pkg.ts"
+ // "../../../target/test-ts-modules-pkg/test-mn1.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn2.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn3a.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn3b.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn4a.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn4b.d.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn5.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn6.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn7.ts",
+ // "../../../target/test-ts-modules-pkg/test-mn8.ts"
]
}
\ No newline at end of file