[typescript-rxjs]: support reponseType blob (#3437)

* feat(typescript-rxjs): add optional responseType to RequestOpts

* refactor(typescript-rxjs): remove redundant importMapping.clear() in codegen constructor

* feat(typescript-rxjs): update this.reservedWords

* fix(typescript-rxjs): add missing fields copied to ExtendedCodegenOperation

* feat(typescript-rxjs): add support for responseType blob

* feat(typescript-rxjs): regenerate samples
This commit is contained in:
Bernd Hacker 2019-07-25 15:16:54 +02:00 committed by Esteban Gehring
parent a3cf964ce9
commit 8231cbfe81
7 changed files with 61 additions and 6 deletions

View File

@ -42,10 +42,6 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
public TypeScriptRxjsClientCodegen() { public TypeScriptRxjsClientCodegen() {
super(); super();
// clear import mapping (from default generator) as TS does not use it
// at the moment
importMapping.clear();
outputFolder = "generated-code/typescript-rxjs"; outputFolder = "generated-code/typescript-rxjs";
embeddedTemplateDir = templateDir = "typescript-rxjs"; embeddedTemplateDir = templateDir = "typescript-rxjs";
@ -55,6 +51,9 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.modelTemplateFiles.put("models.mustache", ".ts"); this.modelTemplateFiles.put("models.mustache", ".ts");
this.addExtraReservedWords(); this.addExtraReservedWords();
languageSpecificPrimitives.add("Blob");
typeMapping.put("file", "Blob");
this.cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json")); this.cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json"));
this.cliOptions.add(new CliOption(WITH_INTERFACES, "Setting this property to true will generate interfaces next to the default class implementations.", SchemaTypeUtil.BOOLEAN_TYPE).defaultValue(Boolean.FALSE.toString())); this.cliOptions.add(new CliOption(WITH_INTERFACES, "Setting this property to true will generate interfaces next to the default class implementations.", SchemaTypeUtil.BOOLEAN_TYPE).defaultValue(Boolean.FALSE.toString()));
} }
@ -93,6 +92,11 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
} }
} }
@Override
public boolean isDataTypeFile(final String dataType) {
return dataType != null && dataType.equals("Blob");
}
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
Schema inner; Schema inner;
@ -162,6 +166,33 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
return result; return result;
} }
@Override
public void postProcessParameter(CodegenParameter parameter) {
super.postProcessParameter(parameter);
parameter.dataType = applyLocalTypeMapping(parameter.dataType);
}
@Override
public String getSchemaType(Schema p) {
String openAPIType = super.getSchemaType(p);
if (isLanguagePrimitive(openAPIType)) {
return openAPIType;
}
applyLocalTypeMapping(openAPIType);
return openAPIType;
}
private String applyLocalTypeMapping(String type) {
if (typeMapping.containsKey(type)) {
type = typeMapping.get(type);
}
return type;
}
private boolean isLanguagePrimitive(String type) {
return languageSpecificPrimitives.contains(type);
}
private void addNpmPackageGeneration() { private void addNpmPackageGeneration() {
if (additionalProperties.containsKey(NPM_REPOSITORY)) { if (additionalProperties.containsKey(NPM_REPOSITORY)) {
this.setNpmRepository(additionalProperties.get(NPM_REPOSITORY).toString()); this.setNpmRepository(additionalProperties.get(NPM_REPOSITORY).toString());
@ -290,10 +321,10 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.reservedWords.add("ModelPropertyNaming"); this.reservedWords.add("ModelPropertyNaming");
this.reservedWords.add("RequestArgs"); this.reservedWords.add("RequestArgs");
this.reservedWords.add("RequestOpts"); this.reservedWords.add("RequestOpts");
this.reservedWords.add("ResponseArgs");
this.reservedWords.add("exists"); this.reservedWords.add("exists");
this.reservedWords.add("RequestContext");
this.reservedWords.add("ResponseContext");
this.reservedWords.add("Middleware"); this.reservedWords.add("Middleware");
this.reservedWords.add("AjaxRequest");
this.reservedWords.add("AjaxResponse"); this.reservedWords.add("AjaxResponse");
} }
@ -310,6 +341,7 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.hasProduces = o.hasProduces; this.hasProduces = o.hasProduces;
this.hasParams = o.hasParams; this.hasParams = o.hasParams;
this.hasOptionalParams = o.hasOptionalParams; this.hasOptionalParams = o.hasOptionalParams;
this.hasRequiredParams = o.hasRequiredParams;
this.returnTypeIsPrimitive = o.returnTypeIsPrimitive; this.returnTypeIsPrimitive = o.returnTypeIsPrimitive;
this.returnSimpleType = o.returnSimpleType; this.returnSimpleType = o.returnSimpleType;
this.subresourceOperation = o.subresourceOperation; this.subresourceOperation = o.subresourceOperation;
@ -318,6 +350,7 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.isMultipart = o.isMultipart; this.isMultipart = o.isMultipart;
this.hasMore = o.hasMore; this.hasMore = o.hasMore;
this.isResponseBinary = o.isResponseBinary; this.isResponseBinary = o.isResponseBinary;
this.isResponseFile = o.isResponseFile;
this.hasReference = o.hasReference; this.hasReference = o.hasReference;
this.isRestfulIndex = o.isRestfulIndex; this.isRestfulIndex = o.isRestfulIndex;
this.isRestfulShow = o.isRestfulShow; this.isRestfulShow = o.isRestfulShow;
@ -325,6 +358,8 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.isRestfulUpdate = o.isRestfulUpdate; this.isRestfulUpdate = o.isRestfulUpdate;
this.isRestfulDestroy = o.isRestfulDestroy; this.isRestfulDestroy = o.isRestfulDestroy;
this.isRestful = o.isRestful; this.isRestful = o.isRestful;
this.isDeprecated = o.isDeprecated;
this.isCallbackRequest = o.isCallbackRequest;
this.path = o.path; this.path = o.path;
this.operationId = o.operationId; this.operationId = o.operationId;
this.returnType = o.returnType; this.returnType = o.returnType;
@ -339,6 +374,8 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.discriminator = o.discriminator; this.discriminator = o.discriminator;
this.consumes = o.consumes; this.consumes = o.consumes;
this.produces = o.produces; this.produces = o.produces;
this.prioritizedContentTypes = o.prioritizedContentTypes;
this.servers = o.servers;
this.bodyParam = o.bodyParam; this.bodyParam = o.bodyParam;
this.allParams = o.allParams; this.allParams = o.allParams;
this.bodyParams = o.bodyParams; this.bodyParams = o.bodyParams;
@ -346,18 +383,23 @@ public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen
this.queryParams = o.queryParams; this.queryParams = o.queryParams;
this.headerParams = o.headerParams; this.headerParams = o.headerParams;
this.formParams = o.formParams; this.formParams = o.formParams;
this.cookieParams = o.cookieParams;
this.requiredParams = o.requiredParams; this.requiredParams = o.requiredParams;
this.optionalParams = o.optionalParams; this.optionalParams = o.optionalParams;
this.authMethods = o.authMethods; this.authMethods = o.authMethods;
this.tags = o.tags; this.tags = o.tags;
this.responses = o.responses; this.responses = o.responses;
this.callbacks = o.callbacks;
this.imports = o.imports; this.imports = o.imports;
this.examples = o.examples; this.examples = o.examples;
this.requestBodyExamples = o.requestBodyExamples;
this.externalDocs = o.externalDocs; this.externalDocs = o.externalDocs;
this.vendorExtensions = o.vendorExtensions; this.vendorExtensions = o.vendorExtensions;
this.nickname = o.nickname; this.nickname = o.nickname;
this.operationIdOriginal = o.operationIdOriginal;
this.operationIdLowerCase = o.operationIdLowerCase; this.operationIdLowerCase = o.operationIdLowerCase;
this.operationIdCamelCase = o.operationIdCamelCase; this.operationIdCamelCase = o.operationIdCamelCase;
this.operationIdSnakeCase = o.operationIdSnakeCase;
// new fields // new fields
this.hasHttpHeaders = o.getHasHeaderParams() || o.getHasBodyParam() || o.hasAuthMethods; this.hasHttpHeaders = o.getHasHeaderParams() || o.getHasBodyParam() || o.hasAuthMethods;

View File

@ -171,6 +171,9 @@ export class {{classname}} extends BaseAPI {
{{#hasFormParams}} {{#hasFormParams}}
body: formData, body: formData,
{{/hasFormParams}} {{/hasFormParams}}
{{#isResponseFile}}
responseType: 'blob'
{{/isResponseFile}}
}); });
} }

View File

@ -97,6 +97,7 @@ export class BaseAPI {
method: requestOpts.method, method: requestOpts.method,
headers: requestOpts.headers, headers: requestOpts.headers,
body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body), body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body),
responseType: requestOpts.responseType || 'json'
}; };
} }
@ -149,6 +150,7 @@ export interface RequestOpts {
headers?: HttpHeaders; headers?: HttpHeaders;
query?: HttpQuery; query?: HttpQuery;
body?: HttpBody; body?: HttpBody;
responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';
} }
export const encodeURI = (value: any) => encodeURIComponent(String(value)) export const encodeURI = (value: any) => encodeURIComponent(String(value))

View File

@ -108,6 +108,7 @@ export class BaseAPI {
method: requestOpts.method, method: requestOpts.method,
headers: requestOpts.headers, headers: requestOpts.headers,
body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body), body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body),
responseType: requestOpts.responseType || 'json'
}; };
} }
@ -160,6 +161,7 @@ export interface RequestOpts {
headers?: HttpHeaders; headers?: HttpHeaders;
query?: HttpQuery; query?: HttpQuery;
body?: HttpBody; body?: HttpBody;
responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';
} }
export const encodeURI = (value: any) => encodeURIComponent(String(value)) export const encodeURI = (value: any) => encodeURIComponent(String(value))

View File

@ -108,6 +108,7 @@ export class BaseAPI {
method: requestOpts.method, method: requestOpts.method,
headers: requestOpts.headers, headers: requestOpts.headers,
body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body), body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body),
responseType: requestOpts.responseType || 'json'
}; };
} }
@ -160,6 +161,7 @@ export interface RequestOpts {
headers?: HttpHeaders; headers?: HttpHeaders;
query?: HttpQuery; query?: HttpQuery;
body?: HttpBody; body?: HttpBody;
responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';
} }
export const encodeURI = (value: any) => encodeURIComponent(String(value)) export const encodeURI = (value: any) => encodeURIComponent(String(value))

View File

@ -108,6 +108,7 @@ export class BaseAPI {
method: requestOpts.method, method: requestOpts.method,
headers: requestOpts.headers, headers: requestOpts.headers,
body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body), body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body),
responseType: requestOpts.responseType || 'json'
}; };
} }
@ -160,6 +161,7 @@ export interface RequestOpts {
headers?: HttpHeaders; headers?: HttpHeaders;
query?: HttpQuery; query?: HttpQuery;
body?: HttpBody; body?: HttpBody;
responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';
} }
export const encodeURI = (value: any) => encodeURIComponent(String(value)) export const encodeURI = (value: any) => encodeURIComponent(String(value))

View File

@ -108,6 +108,7 @@ export class BaseAPI {
method: requestOpts.method, method: requestOpts.method,
headers: requestOpts.headers, headers: requestOpts.headers,
body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body), body: requestOpts.body instanceof FormData ? requestOpts.body : JSON.stringify(requestOpts.body),
responseType: requestOpts.responseType || 'json'
}; };
} }
@ -160,6 +161,7 @@ export interface RequestOpts {
headers?: HttpHeaders; headers?: HttpHeaders;
query?: HttpQuery; query?: HttpQuery;
body?: HttpBody; body?: HttpBody;
responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';
} }
export const encodeURI = (value: any) => encodeURIComponent(String(value)) export const encodeURI = (value: any) => encodeURIComponent(String(value))