Skip to content

Commit 1579daa

Browse files
Merge pull request #111 from vojtechhabarta/umd
UMD modules (export as namespace)
2 parents 5c56f7b + e6425a1 commit 1579daa

File tree

4 files changed

+30
-1
lines changed
  • typescript-generator-core/src/main/java/cz/habarta/typescript/generator
  • typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle
  • typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven

4 files changed

+30
-1
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
package cz.habarta.typescript.generator;
33

4+
import cz.habarta.typescript.generator.emitter.Emitter;
45
import cz.habarta.typescript.generator.emitter.EmitterExtension;
56
import cz.habarta.typescript.generator.util.Predicate;
67
import java.io.File;
@@ -22,6 +23,7 @@ public class Settings {
2223
public TypeScriptOutputKind outputKind = null;
2324
public String module = null;
2425
public String namespace = null;
26+
public String umdNamespace = null;
2527
public JsonLibrary jsonLibrary = null;
2628
private Predicate<String> excludeFilter = null;
2729
public boolean declarePropertiesAsOptional = false;
@@ -103,6 +105,15 @@ public void validate() {
103105
if (outputKind == TypeScriptOutputKind.ambientModule && outputFileType == TypeScriptFileType.implementationFile) {
104106
throw new RuntimeException("Ambient modules are not supported in implementation files. " + seeLink());
105107
}
108+
if (outputKind != TypeScriptOutputKind.module && umdNamespace != null) {
109+
throw new RuntimeException("'umdNamespace' parameter is only applicable to modules. " + seeLink());
110+
}
111+
if (outputFileType == TypeScriptFileType.implementationFile && umdNamespace != null) {
112+
throw new RuntimeException("'umdNamespace' parameter is not applicable to implementation files. " + seeLink());
113+
}
114+
if (umdNamespace != null && !Emitter.isValidIdentifierName(umdNamespace)) {
115+
throw new RuntimeException("Value of 'umdNamespace' parameter is not valid identifier: " + umdNamespace + ". " + seeLink());
116+
}
106117
if (jsonLibrary == null) {
107118
throw new RuntimeException("Required 'jsonLibrary' parameter is not configured.");
108119
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public void emit(TsModel model, Writer output, String outputName, boolean closeO
3232
emitReferences();
3333
emitImports();
3434
emitModule(model);
35+
emitUmdNamespace();
3536
if (closeOutput) {
3637
close();
3738
}
@@ -148,7 +149,7 @@ private String toPropertyName(String name) {
148149

149150
// https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#2.2.2
150151
// http://www.ecma-international.org/ecma-262/6.0/index.html#sec-names-and-keywords
151-
private static boolean isValidIdentifierName(String name) {
152+
public static boolean isValidIdentifierName(String name) {
152153
if (name == null || name.isEmpty()) {
153154
return false;
154155
}
@@ -193,6 +194,13 @@ private void emitNumberEnums(TsModel model, boolean exportKeyword, boolean decla
193194
}
194195
}
195196

197+
private void emitUmdNamespace() {
198+
if (settings.umdNamespace != null) {
199+
writeNewLine();
200+
writeIndentedLine("export as namespace " + settings.umdNamespace + ";");
201+
}
202+
}
203+
196204
private void emitComments(List<String> comments) {
197205
if (comments != null) {
198206
writeIndentedLine("/**");

typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class GenerateTask extends DefaultTask {
1717
public TypeScriptOutputKind outputKind;
1818
public String module;
1919
public String namespace;
20+
public String umdNamespace;
2021
public List<String> classes;
2122
public List<String> classPatterns;
2223
public String classesFromJaxrsApplication;
@@ -79,6 +80,7 @@ public void generate() throws Exception {
7980
settings.outputKind = outputKind;
8081
settings.module = module;
8182
settings.namespace = namespace;
83+
settings.umdNamespace = umdNamespace;
8284
settings.setExcludeFilter(excludeClasses, excludeClassPatterns);
8385
settings.jsonLibrary = jsonLibrary;
8486
settings.declarePropertiesAsOptional = declarePropertiesAsOptional;

typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven/GenerateMojo.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ public class GenerateMojo extends AbstractMojo {
5656
@Parameter
5757
private String namespace;
5858

59+
/**
60+
* Turns proper module into UMD (Universal Module Definition) with specified namespace.
61+
* Only applicable to declaration files.
62+
*/
63+
@Parameter
64+
private String umdNamespace;
65+
5966
/**
6067
* JSON classes to process.
6168
*/
@@ -309,6 +316,7 @@ public void execute() {
309316
settings.outputKind = outputKind;
310317
settings.module = module;
311318
settings.namespace = namespace;
319+
settings.umdNamespace = umdNamespace;
312320
settings.setExcludeFilter(excludeClasses, excludeClassPatterns);
313321
settings.jsonLibrary = jsonLibrary;
314322
settings.declarePropertiesAsOptional = declarePropertiesAsOptional;

0 commit comments

Comments
 (0)