diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index 9322af82e95..e1b05af4ebb 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -26,6 +26,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp protected String modelPropertyNaming= "camelCase"; protected Boolean supportsES6 = true; + protected HashSet languageGenericTypes; public AbstractTypeScriptClientCodegen() { super(); @@ -58,6 +59,11 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp "any", "Error" )); + + languageGenericTypes = new HashSet(Arrays.asList( + "Array" + )); + instantiationTypes.put("array", "Array"); typeMapping = new HashMap(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java index aeb5d774add..91ed4f35f86 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngular2ClientCodegen.java @@ -132,7 +132,7 @@ public class TypeScriptAngular2ClientCodegen extends AbstractTypeScriptClientCod @Override public String getSwaggerType(Property p) { String swaggerType = super.getSwaggerType(p); - if(languageSpecificPrimitives.contains(swaggerType)) { + if(isLanguagePrimitive(swaggerType) || isLanguageGenericType(swaggerType)) { return swaggerType; } return addModelPrefix(swaggerType); @@ -146,15 +146,19 @@ public class TypeScriptAngular2ClientCodegen extends AbstractTypeScriptClientCod type = swaggerType; } - if (!startsWithLanguageSpecificPrimitiv(type)) { + if (!isLanguagePrimitive(type) && !isLanguageGenericType(type)) { type = "models." + swaggerType; } return type; } - private boolean startsWithLanguageSpecificPrimitiv(String type) { - for (String langPrimitive:languageSpecificPrimitives) { - if (type.startsWith(langPrimitive)) { + private boolean isLanguagePrimitive(String type) { + return languageSpecificPrimitives.contains(type); + } + + private boolean isLanguageGenericType(String type) { + for (String genericType: languageGenericTypes) { + if (type.startsWith(genericType + "<")) { return true; } } diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/model.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/model.mustache index d0e544c4e2f..410810763d8 100644 --- a/modules/swagger-codegen/src/main/resources/typescript-angular2/model.mustache +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/model.mustache @@ -8,35 +8,6 @@ import * as models from './models'; * {{{description}}} */ {{/description}} -export interface {{classname}} {{#parent}}extends models.{{{parent}}} {{/parent}}{ -{{#additionalPropertiesType}} - [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; - -{{/additionalPropertiesType}} -{{#vars}} -{{#description}} - /** - * {{{description}}} - */ -{{/description}} - {{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}; - -{{/vars}} -} -{{#hasEnums}} -export namespace {{classname}} { -{{#vars}} -{{#isEnum}} - export enum {{enumName}} { - {{#allowableValues}} - {{#enumVars}} - {{{name}}} = {{{value}}}{{^-last}},{{/-last}} - {{/enumVars}} - {{/allowableValues}} - } -{{/isEnum}} -{{/vars}} -} -{{/hasEnums}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>modelGeneric}}{{/isEnum}} {{/model}} -{{/models}} +{{/models}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/modelEnum.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/modelEnum.mustache new file mode 100644 index 00000000000..47886484118 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/modelEnum.mustache @@ -0,0 +1,12 @@ +{{#description}} + /** + * {{{description}}} + */ +{{/description}} +export enum {{classname}} { +{{#allowableValues}} +{{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/modelGeneric.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/modelGeneric.mustache new file mode 100644 index 00000000000..fbe96c21506 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/modelGeneric.mustache @@ -0,0 +1,28 @@ +export interface {{classname}} {{#parent}}extends models.{{{parent}}} {{/parent}}{ +{{#additionalPropertiesType}} + [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; + +{{/additionalPropertiesType}} +{{#vars}} + {{#description}} + /** + * {{{description}}} + */ + {{/description}} + {{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}; + +{{/vars}} +}{{#hasEnums}} +export namespace {{classname}} { +{{#vars}} + {{#isEnum}} + export enum {{enumName}} { + {{#allowableValues}} + {{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} + {{/allowableValues}} + } + {{/isEnum}} +{{/vars}} +}{{/hasEnums}} \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular2/default/api/PetApi.ts b/samples/client/petstore/typescript-angular2/default/api/PetApi.ts index 5751b452369..3b3a5503a67 100644 --- a/samples/client/petstore/typescript-angular2/default/api/PetApi.ts +++ b/samples/client/petstore/typescript-angular2/default/api/PetApi.ts @@ -427,6 +427,11 @@ export class PetApi { 'application/xml' ]; + // authentication (api_key) required + if (this.configuration.apiKey) + { + headers.set('api_key', this.configuration.apiKey); + } // authentication (petstore_auth) required // oauth required if (this.configuration.accessToken) @@ -436,11 +441,6 @@ export class PetApi { : this.configuration.accessToken; headers.set('Authorization', 'Bearer ' + accessToken); } - // authentication (api_key) required - if (this.configuration.apiKey) - { - headers.set('api_key', this.configuration.apiKey); - } diff --git a/samples/client/petstore/typescript-angular2/npm/README.md b/samples/client/petstore/typescript-angular2/npm/README.md index 1c4f0c5bd4f..5f176a7b484 100644 --- a/samples/client/petstore/typescript-angular2/npm/README.md +++ b/samples/client/petstore/typescript-angular2/npm/README.md @@ -1,4 +1,4 @@ -## @swagger/angular2-typescript-petstore@0.0.1-SNAPSHOT.201612061134 +## @swagger/angular2-typescript-petstore@0.0.1-SNAPSHOT.201612150011 ### Building @@ -19,7 +19,7 @@ navigate to the folder of your consuming project and run one of next commando's. _published:_ ``` -npm install @swagger/angular2-typescript-petstore@0.0.1-SNAPSHOT.201612061134 --save +npm install @swagger/angular2-typescript-petstore@0.0.1-SNAPSHOT.201612150011 --save ``` _unPublished (not recommended):_ diff --git a/samples/client/petstore/typescript-angular2/npm/api/PetApi.ts b/samples/client/petstore/typescript-angular2/npm/api/PetApi.ts index 70ab123c5a5..3b3a5503a67 100644 --- a/samples/client/petstore/typescript-angular2/npm/api/PetApi.ts +++ b/samples/client/petstore/typescript-angular2/npm/api/PetApi.ts @@ -217,7 +217,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -271,7 +274,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -320,7 +326,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -369,7 +378,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -424,7 +436,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -472,7 +487,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } @@ -529,7 +547,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } headers.set('Content-Type', 'application/x-www-form-urlencoded'); @@ -592,7 +613,10 @@ export class PetApi { // oauth required if (this.configuration.accessToken) { - headers.set('Authorization', 'Bearer ' + this.configuration.accessToken); + let accessToken = typeof this.configuration.accessToken === 'function' + ? this.configuration.accessToken() + : this.configuration.accessToken; + headers.set('Authorization', 'Bearer ' + accessToken); } headers.set('Content-Type', 'application/x-www-form-urlencoded'); diff --git a/samples/client/petstore/typescript-angular2/npm/configuration.ts b/samples/client/petstore/typescript-angular2/npm/configuration.ts index 94989933b63..a566a180e4e 100644 --- a/samples/client/petstore/typescript-angular2/npm/configuration.ts +++ b/samples/client/petstore/typescript-angular2/npm/configuration.ts @@ -2,5 +2,5 @@ export class Configuration { apiKey: string; username: string; password: string; - accessToken: string; + accessToken: string | (() => string); } \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular2/npm/package.json b/samples/client/petstore/typescript-angular2/npm/package.json index eeeca81bcbb..6dd91bb3f86 100644 --- a/samples/client/petstore/typescript-angular2/npm/package.json +++ b/samples/client/petstore/typescript-angular2/npm/package.json @@ -1,6 +1,6 @@ { "name": "@swagger/angular2-typescript-petstore", - "version": "0.0.1-SNAPSHOT.201612061134", + "version": "0.0.1-SNAPSHOT.201612150011", "description": "swagger client for @swagger/angular2-typescript-petstore", "author": "Swagger Codegen Contributors", "keywords": [