Open jdespatis opened 3 months ago
To complete, I've found a workaround for now, but it's definitely not the good strategy...
I export all templates of the typescript-rxjs
generator with the command:
docker run --rm \
-v $PWD/generated:/generated openapitools/openapi-generator-cli author template \
-g typescript-rxjs \
--output ./generated/templates-rxjs
I remove (from ./generated/templates-rxjs
) all templates except the apis.mustache
template
And then apply this patch to it: (basically replace Request
by OperationRequest
to avoid any conflict)
--- generated/out-rxjs/apis.mustache 2024-03-26 14:25:29.000000000 +0100
+++ generated/out/apis.mustache 2024-03-26 11:58:34.000000000 +0100
@@ -15,7 +15,7 @@
{{#operations}}
{{#operation}}
{{#allParams.0}}
-export interface {{operationIdCamelCase}}Request {
+export interface {{operationIdCamelCase}}OperationRequest {
{{#allParams}}
{{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}};
{{/allParams}}
@@ -39,12 +39,12 @@
* {{&summary}}
{{/summary}}
*/
- {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{{returnType}}}{{^returnType}}void{{/returnType}}>
+ {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}OperationRequest{{/allParams.0}}): Observable<{{{returnType}}}{{^returnType}}void{{/returnType}}>
{{#withProgressSubscriber}}
- {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request, {{/allParams.0}}opts?: Pick<OperationOpts, 'progressSubscriber'>): Observable<{{{returnType}}}{{^returnType}}void{{/returnType}}>
+ {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}OperationRequest, {{/allParams.0}}opts?: Pick<OperationOpts, 'progressSubscriber'>): Observable<{{{returnType}}}{{^returnType}}void{{/returnType}}>
{{/withProgressSubscriber}}
- {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request, {{/allParams.0}}opts?: OperationOpts): Observable<{{#returnType}}AjaxResponse<{{{.}}}>{{/returnType}}{{^returnType}}void | AjaxResponse<void>{{/returnType}}>
- {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request, {{/allParams.0}}opts?: OperationOpts): Observable<{{#returnType}}{{{returnType}}} | AjaxResponse<{{{returnType}}}>{{/returnType}}{{^returnType}}void | AjaxResponse<void>{{/returnType}}> {
+ {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}OperationRequest, {{/allParams.0}}opts?: OperationOpts): Observable<{{#returnType}}AjaxResponse<{{{.}}}>{{/returnType}}{{^returnType}}void | AjaxResponse<void>{{/returnType}}>
+ {{nickname}}({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.x-param-name-alternative}}: {{vendorExtensions.x-param-name-alternative}}{{/vendorExtensions.x-param-name-alternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}OperationRequest, {{/allParams.0}}opts?: OperationOpts): Observable<{{#returnType}}{{{returnType}}} | AjaxResponse<{{{returnType}}}>{{/returnType}}{{^returnType}}void | AjaxResponse<void>{{/returnType}}> {
{{#hasParams}}
{{#allParams}}
{{#required}}
I can then use the generator typescript-rxjs
safely without any compiler problem, with the command:
docker run --rm \
-v $PWD/generated:/generated openapitools/openapi-generator-cli generate \
-t ./generated/templates-rxjs \
-i ./generated/openapi.json \
-g typescript-rxjs \
-o /generated/Result
As said before, it's not the good strategy, as this template is roughtly the same as the one of the generator typescript-fetch
(nearly same structure of files generated), and it perfectly works with the latter
=> it seems that the {{operationIdCamelCase}}
in the typescript-rxjs
template doesn't return something as strong as the one provided by typescript-fetch
Any idea of a better fix ?
Thanks for your feedback!
This seems related to issue #17909 which created some time ago
Bug Report Checklist
Description
I want to generate models and API interfaces from an OpenAPI 3.0.3 schema using the
typescript-rxjs
generator.openapi-generator version
7.5.0-SNAPSHOT
OpenAPI declaration file content or url
Steps to reproduce
You can reproduce those steps to reproduce: (
./generated/openapi.json
contains the json provided above)It generates (among other files) :
apis/RetailOrdersApi.ts
models/V1OrderRetailOrdersParametersIdPostRequest
And the problem is that
apis/RetailOrdersApi.ts
generated contains this piece of typescript code, which is invalid:The code is invalid because the interface uses the name
V1OrderRetailOrdersParametersIdPostRequest
which is also the same name of a model imported just above. => I get a compiler typescript errorTS2440: Import declaration conflicts with local declaration of 'V1OrderRetailOrdersParametersIdPostRequest'.
Related issues/PRs
None
Suggest a fix
I don't get this problem when I'm using
typescript-fetch
generator, because:V1OrderRetailOrdersParametersIdPostRequest
V1OrderRetailOrdersParametersIdPostOperationRequest
I don't have any suggestion, but I can work on a PR if you help me understand where should I apply the fix.