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